Sunteți pe pagina 1din 8

Proiect Greentfoot X i

Comarnic Liliana, Colegiul Naional de


Informatic Grigore Moisil din Braov
Mlescu Iulia, Liceul Tehnologic Sf. Mc.
Sava, Berca

Descrierea animaiei
Jocul

funcioneaz n acest fel:


are doi jucatori, care isi vor lua rndul la click.
Cnd ncepe jocul, toate cele nou celulele de
pe tabla sunt goale. Cnd primul juctor face
clic pe o celul goal, un O va fi plasat n acea
celul; cnd al doilea jucator face clic pe o
celul goal, un X va fi plasat n acea celul.
n momentul n care apar pe linie, pe colan sau
pe diagonale trei de O sau trei de X, jocul se
ncheie i apare imaginea ctigtorului

Descrierea story board-ului

public Board()
{
super(3, 3, 130);
setBackground("cell.jpg");
cell_1 = new GameBall();
addObject(cell_1, 0, 0);
cell_2 = new GameBall();
addObject(cell_2, 1, 0);
cell_3 = new GameBall();
addObject(cell_3, 2, 0);
cell_4 = new GameBall();
addObject(cell_4, 0, 1);
cell_5 = new GameBall();
addObject(cell_5, 1, 1);
cell_6 = new GameBall();
addObject(cell_6, 2, 1);
cell_7 = new GameBall();
addObject(cell_7, 0, 2);
cell_8 = new GameBall();
addObject(cell_8, 1, 2);
cell_9 = new GameBall();
addObject(cell_9, 2, 2);
player = new Player();
addObject(player, 0,0);
}

Se creeaz o tabl de joc cu 3x3 celule

Se seteaz imaginea de fundal prin selecie,


dintre imaginile din Greenfoot

Se face iniializarea celulelor pentru joc: ele


pot fi selectate cu click astfel nct s devin
active

Se activeaz juctorul

Descrierea story board-ului

public void act(){


if (
( cell_1.isX() && cell_2.isX() && cell_3.isX() ) ||
( cell_4.isX() && cell_5.isX() && cell_6.isX() ) ||
( cell_7.isX() && cell_8.isX() && cell_9.isX() ) ||
( cell_1.isX() && cell_4.isX() && cell_7.isX() ) ||
( cell_2.isX() && cell_5.isX() && cell_8.isX() ) ||
( cell_3.isX() && cell_6.isX() && cell_9.isX() ) ||
( cell_1.isX() && cell_5.isX() && cell_9.isX() ) ||
( cell_3.isX() && cell_5.isX() && cell_7.isX() )
)
{
cell_1.setWinIfX();cell_2.setWinIfX();cell_3.setWinIfX();
cell_4.setWinIfX();cell_5.setWinIfX();cell_6.setWinIfX();
cell_7.setWinIfX();cell_8.setWinIfX();cell_9.setWinIfX();
player.setPlayer2();
Greenfoot.stop();
}
else{
if (
( cell_1.isO() && cell_2.isO() && cell_3.isO() ) ||
( cell_4.isO() && cell_5.isO() && cell_6.isO() ) ||
( cell_7.isO() && cell_8.isO() && cell_9.isO() ) ||
( cell_1.isO() && cell_4.isO() && cell_7.isO() ) ||
( cell_2.isO() && cell_5.isO() && cell_8.isO() ) ||
( cell_3.isO() && cell_6.isO() && cell_9.isO() ) ||
( cell_1.isO() && cell_5.isO() && cell_9.isO() ) ||
( cell_3.isO() && cell_5.isO() && cell_7.isO() )
)
{

Descrierea metodei act() //Determinarea


ctigtorului

Se verific dac trei celule de pe aceea i linie


sau aceeai coloan sau de pe diagonale
conin imaginea cu X, deci au fost selectate
de ctre cel de-al doilea juctor

n caz afirmativ el este declarat ctigtor i


se pune imaginea ctigtorului n locul
imaginii X i se ncheie jocul

Se verific dac trei celule de pe aceea i linie


sau aceeai coloan sau de pe diagonale
conin imaginea cu O, deci au fost selectate
de ctre primul juctor

n caz afirmativ el este declarat ctigtor i


se pune imaginea ctigtorului n locul
imaginii O i se ncheie jocul

cell_1.setWinIfO();cell_2.setWinIfO();cell_3.setWinIfO();

cell_4.setWinIfO();cell_5.setWinIfO();cell_6.setWinIfO();

cell_7.setWinIfO();cell_8.setWinIfO();cell_9.setWinIfO();
player.setPlayer1();
Greenfoot.stop();
}
}
}
}

Descrierea subclasei Player a clasei Actor

public class Player extends Actor


{
enum PlayerMode {PLAYER1, PLAYER2 };
PlayerMode mode;
public Player(){
mode = PlayerMode.PLAYER1;
setImage("beeper.png");
}
public void act()
{
if (Greenfoot.mouseMoved(null)){
MouseInfo mouse = Greenfoot.getMouseInfo();
setLocation(mouse.getX(), mouse.getY());
}
if (Greenfoot.mouseClicked(null)){
GameBall ball =
(GameBall)getOneIntersectingObject(GameBall.class);
if(ball!=null){
if (mode == PlayerMode.PLAYER1 ){
ball.setO();
setPlayer2();
}
else if (mode == PlayerMode.PLAYER2){
ball.setX();
setPlayer1();
}
}
}
}
public void setPlayer1(){
mode = PlayerMode.PLAYER1;
setImage("beeper.png");
}
public void setPlayer2(){
mode = PlayerMode.PLAYER2;
setImage("greenfoot.png");
}
}

Se preiau cu mouse-ul coordonatele de pe


tabl unde se face click

n acele coordonate se va aeza O dac


juctorul curent este primul, apoi se transfer
controlul celui de al doilea juctor

Dac juctorul curent este cel de al doilea, se


aeaz X, apoi se transfer controlul
primului juctor

nainte de a bifa cu X sau O suntem


anunai printr-o imagine cu ce anume
urmeaz a se bifa; acest lucru se face in
metodele setPlayer1(), respectiv setPlayer2()

Descrierea subclasei GameBall a clasei Actor

public class GameBall extends Actor


{
enum BallState { UNCLICKED, X, O };
BallState state = BallState.UNCLICKED;
GameBall(){
setImage("cell.jpg");
}
public void act()
{
// Add your action code here.
}
public void setX(){
setImage("X.png");
state=BallState.X;
}
public void setO(){
setImage("O.png");
state = BallState.O;
}
public void reset(){
setImage("cell.jpg");
state = BallState.UNCLICKED;
}
public boolean isUnclicked(){
return (state == BallState.UNCLICKED);
}
public boolean isX(){
return (state==BallState.X);
}
public boolean isO(){
return (state==BallState.O);
}
public void setWinIfX(){
if (state == BallState.X){
setImage("smile.png");
}
}
public void setWinIfO(){
if ( state == BallState.O){
setImage("smile.png");
}
}
}

Sunt descrise metodele prin care se seteaz


imaginile de fundal

Dac nu s-a fcut click, imaginea de fundal


va fi cell.jpg

Dac juctorul curent este primul, atunci se


pune imaginea O

Dac juctorul curent este al doilea, atunci


se pune imaginea X

Exist dou metode care verific dac


juctorul curent este primul sau al doilea

n caz de ctig se seteaz imaginea


smile.jpg

Execuia aplicaiei X i O

Dezvoltri ulterioare

Posibiliatea realizrii unei evidene a scorului pe juctori pe o perioad de


timp

Imaginea de ctigtor s fie diferit pentru fiecare juctor

S-ar putea să vă placă și