• Nenhum resultado encontrado

4 Κεθάιαηο - Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζω Bluetooth

4.1 Γεμιοσργία ηοσ Connect 4 – Bluetooth

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 58 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

4 Κεθάιαηο - Γεκηοσργία ειεθηροληθού παητληδηού

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 59 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

4.1.1 Οη αιιαγές ηοσ Bluetooth Chat

Σα αξρεία ζηα νπνία ζα γίλνπλ νη αιιαγέο ώζηε λα ελζσκαησζεί ην παηρλίδη Connect 4 κε ην Bluetooth Chat είλαη :

 NameUI.java

 ChatMain.java

 NetLayer.java

 Reader.java

 Sender.java

 Util.java

Καη ηα αξρεία ηα νπνία δελ ρξεηαδόκαζηε πηα είλαη :

 InputUI.java

 MessageUI.java

Ο ιόγνο πνπ δελ ρξεηαδόκαζηε ηα αξρεία απηά είλαη επεηδή ην inputUI ήηαλ γηα λα γξαθνύκε θάπνην κήλπκα θαη λα ην ζηέιλνπκε ζηνπο άιινπο ρξήζηεο, θάηη ην νπνίν δελ ζα καο ρξεηαζηεί εδώ θαη ην MessageUI ήηαλ ην interface ηνπ chat θάηη ην νπνίν επίζεο δελ ρξεηαδόκαζηε εδώ ιόγν ηνπ όηη ην interface καο ηώξα ζα είλαη ην Connect 4.

Σέινο ηα λέα καο αξρεία ζα είλαη ηα παξαθάησ ηα νπνία ζα ηα αλαιύζνπκε ζηελ ζπλέρεηα

 C4Canvas.java

 C4State.java

4.1.2 Σο λέο αρτείο NameUI.java

import javax.microedition.lcdui.*;

public class NameUI extends Form {

TextField text;

public NameUI() {

super("Enter Your Name");

setCommandListener( ChatMain.instance );

addCommand(new Command("Play", Command.SCREEN, 1));

append( new StringItem( "", "You must enter a name before hitting Play button." ) );

append( text = new TextField( "Your Name", "", 10, TextField.ANY ) );

} }

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 60 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

Οη αιιαγέο πνπ θάλακε είλαη απιά γηα ινγνύο εκθάληζεο. Αιιάμακε ην κελνύ θαη βάιακε κόλν ηελ επηινγή Play θαζώο θαη ηελ απαξαίηεηε αιιαγή ζην θείκελν πνπ δεηάεη ην όλνκα ηνπ ρξήζηε.

4.1.3 Σο λέο αρτείο ChatMain.java

Οη αιιαγέο νη νπνίεο ρξεηάδνληαη λα γίλνπλ ζην αξρείν ChatMain είλαη νη εμήο :

 Γηαγξαθή όηη έρεη λα θάλεη κε ηηο κεηαβιεηέο messageui, inputui, isDebug

 Δηζαγσγή κεηαβιεηήο C4Canvas gameCanvas

 Γηαγξαθή νπνύ θαιείηαη ην log ( δελ ρξεζηκνπνηνύκε debug mode )

 ΢ην handleAction ηα κόλα κελύκαηα πνπ εθηεινύλ θάπνηα εξγαζίαο είλαη κόλν ην EVENT_RECEIVE θαη EVENT_LEAVE

 ΢ην commandAction ε if κε ην label “chat” κεηνλνκάδεηαη ζε “Play” θαη όιεο νη άιιεο if δηαγξάθνληαη εθηόο από ηελ “Exit”

 Σέινο πξνζηίζεηαη ην “Find Player” θαη ην “Back”

Σν ηειηθό αξρείν κεηά ηηο απαξαίηεηεο αιιαγέο θαίλεηαη πην θάησ ( πξνζνρή λα δνζεί ζηηο αιιαγέο ζηηο ζπλαξηήζεηο handleAction θαη commandAction )

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import java.io.*;

public class ChatMain extends MIDlet implements BTListener, CommandListener {

// shared static variables

public static ChatMain instance;

public static Display display;

public NameUI nameui;

public C4Canvas gameCanvas;

// Bluetooth network layer for BlueChat app public NetLayer btnet;

public ChatMain() {

instance = this;

}

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 61 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

public void startApp() {

// obtain reference to Display singleton display = Display.getDisplay(this );

// initialize the GUI component, and prompt for name input nameui = new NameUI();

display.setCurrent( nameui );

}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public static void quitApp() { instance.destroyApp(true);

instance.notifyDestroyed();

instance = null;

display = null;

}

public void handleAction( String event, Object param1, Object param2 ) {

if ( event.equals( BTListener.EVENT_JOIN ) ) {

// nothing to do

} else if ( event.equals( BTListener.EVENT_SENT ) ) {

// nothing to do

} else if ( event.equals( BTListener.EVENT_RECEIVED ) ) {

// a new message has received from a remote user EndPoint endpt = (EndPoint) param1;

ChatPacket msg = (ChatPacket) param2;

// render this message on screen gameCanvas.receiveMessage(msg.msg);

} else if ( event.equals( BTListener.EVENT_LEAVE ) ) {

// a user has leave the chat room EndPoint endpt = (EndPoint) param1;

gameCanvas.stop();

} }

public void commandAction(Command c, Displayable d)

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 62 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

{

if ( d == nameui && ( c.getLabel().equals("Play") ) ) {

// user enters Connect 4.

// create and initialize Bluetooth network layer btnet = new NetLayer();

String localName = nameui.text.getString();

if(localName.length() != 0) {

// initialize the network layer. This will start the local BlueChat server btnet.init( localName, this );

// search for existing BlueChat nodes btnet.query();

// switch screen to Connect 4

if (gameCanvas == null) {

gameCanvas = new C4Canvas(Display.getDisplay(this), localName);

gameCanvas.btnet = btnet;

gameCanvas.addCommand(new Command("Find Player", Command.SCREEN, 0));

Command exitCommand = new Command("Exit", Command.EXIT, 1);

gameCanvas.addCommand(new Command("Back", Command.SCREEN, 2));

gameCanvas.addCommand(exitCommand);

gameCanvas.setCommandListener(this);

gameCanvas.start();

} }

} else if (c.getLabel().equals("Exit") ) {

// disconnect from Connect 4.

// this will send out TERMINATE signal to all connected

// remote EndPoints, wait for the TERMINATE_ACK signal, and // disconnect all connections.

btnet.sendString("Exit");

gameCanvas.stop();

btnet.disconnect();

quitApp();

}else if (d == nameui && c.getLabel().equals("Exit")) {

quitApp();

}else if (c.getLabel().equals("Find Player")) {

btnet.query();

try {

Thread.sleep(1000);

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 63 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

}

catch (InterruptedException ie) {}

btnet.sendString("Connected");

}else if (c.getLabel().equals("Back")) {

btnet.sendString("Exit");

gameCanvas.stop();

btnet.disconnect();

gameCanvas = null;

btnet = null;

nameui = new NameUI();

display.setCurrent( nameui );

} } }

4.1.4 Οη αιιαγές ζηα αρτεία NetLayer, Sender, Reader θαη

Util.java

Οη αιιαγέο ζε απηά ηα αξρεία είλαη απιά λα δηαγξαθνύλ ηα :

 ChatMain.instance.gui_log()

 Καη νη if ( ChatMain.isDebug ) καδί κε ην ζώκα ηνπο

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 64 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

4.1.5 Σο παητλίδη Connect 4 ( C4Canvas.java θαη C4State.java)

4.1.5.1 Πφς παίδεηαι ηο Connect 4

Πξηλ κπνύκε ζηνλ θώδηθα ηνπ παηρληδηνύ θαιό είλαη λα εμεγήζνπκε ηη γίλεηαη ζε απηό ην παηρλίδη θαη πνηα ινγηθή αθνινπζεί. Σν παηρλίδη αξρηθά παίδεηαη κε δύν παίρηεο, ζε απηό ην παηρλίδη ππάξρεη ην παξαθάησ ηακπιό πνπ θαίλεηαη ζηελ εηθόλα 13

Δηθόλα 15 - Connect 4

Ο θάζε παίρηεο ηώξα έρνληαο έλα πνύιη ( κπιε ή θόθθηλν ) επηιέγεη ζε πνηα ζηήιε ζέιεη λα βάιεη ην πνύιη. Ζ επηινγή γίλεηαη βάδνληαο ην βειάθη ηνπ ν ρξήζηεο πάλσ από ηελ ζηήιε ηελ νπνία επηζπκεί θαη ζηελ ζπλερεία πεξηκέλεη ηνλ αληίπαιν λα παίμεη. Όηαλ ν αληίπαινο παίμεη ηόηε ζα έρεη ζηελ νζόλε ηνπ θαη έρεη ηα θόθθηλα πνύιηα θάηη ζαλ ηελ εηθόλα 14 πνπ θαίλεηαη παξαθάησ.

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 65 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

Δηθόλα 16 - Connect 4 θίλεζε

΢ηελ ζπγθεθξηκέλε εηθόλα 14 ν ρξήζηεο κε ηα θόθθηλα πνύιηα (Server) είλαη έηνηκνο λα παίμεη, απηό γηαηί ην ιέεη θαη ην κήλπκα, αιιά θαη από ην γεγνλόο όηη θαίλεηαη ην θόθθηλν βειάθη. ΢ε πεξίπησζε πνπ δελ θαίλεηαη ην βειάθη ν ρξήζηεο ζίγνπξα δελ κπνξεί λα παίμεη. Σέινο ν ζθνπόο ηνπ παηρληδηνύ είλαη έλαο από ηνπο δύν ρξήζηεο λα θαηαθέξεη λα θάλεη κηα επζεία ηεηξάδα ( νξηδόληηα, θάζεηα ή δηαγώληα ), νπνίνο ρξήζηεο ηελ θάλεη πξώηνο είλαη θαη ν ληθεηήο. Σέινο ζε πεξίπησζε πνπ δελ θαηαθέξεη θαλέλαο ρξήζηεο λα θάλεη θάηη ηόηε ην παηρλίδη θξίλεηαη ηζνπαιία.

4.1.5.2 Η λογική ηοσ κώδικα ηοσ Connect 4

Ζ ινγηθή ηνπ θώδηθα έρεη λα θάλεη σο εμήο, ζηελ αξρή ην πξόγξακκα μεθηλάεη θαη δεκηνπξγεί ην ηακπιό πνπ είδακε ζηελ εηθόλα 14 πην πάλσ. Αθνύ ην δεκηνπξγήζεη ηόηε ν ρξήζηεο παηάεη ην θνπκπί ηεο επηινγήο (Fire button) θαη ην πξόγξακκα ζηέιλεη έλα κήλπκα “New Game” θαη δειώλεη ησλ εαπηό ηνπ ζαλ “Server” κηαο θαη απηόο μεθηλάεη ην παηρλίδη. ΢ε δεύηεξε θάζε ηώξα εάλ ππάξρεη θάπνηνο ρξήζηεο ζπλδεκέλνο ηόηε ιακβάλεη ην κήλπκα “New Game” θαη δειώλεη ηνλ εαπηό ηνπ ζαλ “Client”, μεθηλάεη έλα παηρλίδη θαη ζηέιλεη ην κήλπκα “Start”, ζηελ ζπλέρεηα ν “Server” ιακβάλεη ην κήλπκα

“Start” θαη δεκηνπξγεί έλα λέν παηρλίδη. Σώξα όηαλ έλα λέν παηρλίδη δεκηνπξγείηαη απηόκαηα ζηέιλεηαη έλα κήλπκα “Ready” έηζη ν “Client” λα κπνξεί λα παίμεη. Από εθεί θαη πέξα ν παίδεη κηα θόξα ν “Client” θαη κηα θόξα ν “Server”, θάζε θόξα πνπ έλαο ρξήζηεο παίδεη κηα θίλεζε απηή ζηέιλεηε ζηνλ αληίπαιν, ν αληίπαινο ιακβάλεη ηελ θίλεζε πνπ έπαημε ν ρξήζηεο θαη αλαλεώλεη ην ηακπιό ηνπ κε ηελ θίλεζε ηνπ ρξήζηε.

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 66 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

Σέινο κεηά από θάζε θίλεζε ειέγρεηαη εάλ δεκηνπξγήζεθε θάπνηα ηεηξάδα, απηό γίλεηαη κε ηελ θιάζε C4State.

4.1.5.3 Ο κώδικας ηοσ Connect 4

Λόγν ηνπ όηη ν θώδηθαο είλαη πνιύ κεγάινο γηα λα ηνλ εμεγήζνπκε όιν καδί ζα εμεγήζνπκε θάζε θνκκάηη μερσξηζηά θαη θάπνηα θνκκάηηα ηνπ θώδηθα δελ ζα ηα ζπκπεξηιάβνπκε γηα ιόγνπο απιόηεηαο. Σν πιήξεο πξόγξακκα βξίζθεηαη ζην ζπλνδεπηηθό cd πνπ ππάξρεη καδί κε ηελ πηπρηαθή.

private Display display;

private boolean sleeping;

private long frameDelay;

private Image[] piece = new Image[2];

private Sprite arrowSprite;

private Player legalPlayer;

private Player illegalPlayer;

private Player winPlayer;

private Player losePlayer;

private C4State gameState;

private String status = "";

private boolean gameOver;

private boolean myMove;

private int curSlot;

public NetLayer btnet;

private boolean isServer;

private int check;

private boolean okFlag;

public String localName;

Μεξηθέο από ηηο κεηαβιεηέο δελ ρξεηάδνληαη εμήγεζε ιόγν ηνπ όηη είλαη θιαζηθέο κεηαβιεηέο ηηο νπνίεο ηεο έρνπκε ζπλάληεζε θαη ηα πξνεγνύκελα πξνγξάκκαηα.

Ζ κεηαβιεηή piece είλαη γηα ηα θόθθηλα θαη ηα κπιε πνύιηα πνπ ζα ρξεζηκνπνηήζνπκε ζην παηρλίδη. Σν arrowSprite είλαη γηα ηα βειάθηα πνπ ζα δείρλνπλ ζηνλ ρξήζηε πνπ ζα ξίμνπλ ην πνύιη. Οη κεηαβιεηέο Player είλαη γηα ηνπο ήρνπο ηνπο νπνίνπο ζα έρεη ην παηρλίδη. Ζ κεηαβιεηή C4State καο δείρλεη ηελ θαηάζηαζε ηνπ παηρληδηνύ. Σν status είλαη ην κήλπκα ην νπνίν ζα θαίλεηαη ζηνλ ρξήζηε εάλ πξέπεη λα παίμεη ή λα πεξηκέλεη ηνλ αληίπαιν ηνπ. Ζ κεηαβιεηή gameOver καο δείρλεη εάλ ην παηρλίδη έρεη ηειεηώζεη ή αθόκα ζπλερίδεηαη θαη απνζεθεύνληαη εθεί όιεο νη θηλήζεηο ησλ παηρηώλ. Ζ κεηαβιεηή myMove καο δείρλεη εάλ ε επόκελε θίλεζε είλαη δηθή καο ή ηνπ αληηπάινπ καο. Ζ κεηαβιεηή curSlot καο δείρλεη πνηα είλαη ε ζέζε πνπ επηιέρζεθε. Ζ κεηαβιεηή btnet είλαη ε θιάζε πνπ είλαη ππεύζπλε γηα ηελ επηθνηλσλία καο κε ηνλ αληίπαιν θαη ηέινο ε κεηαβιεηή isServer καο δείρλεη εάλ είκαζηε εκείο ν server ή όρη. Σέινο ην check θαη okFlag είλαη γηα

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 67 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

ιόγνπο επηβεβαίσζεο. Σν πξώην ρξεζηκνπνηείηαη ζαλ timer θαη ην flag γηα λα καο δείρλεη εάλ ν ζπλδεδεκέλνο κε καο ρξήζηεο έιαβε ην κήλπκα πνπ ηνπ ζηείιακε.

4.1.5.3.1. Η ζσνάρηηζη start() ηοσ Connect 4

public void start() {

// Set the canvas as the current screen display.setCurrent(this);

// Initialize the piece images try {

piece[0] = Image.createImage("/RedPiece.png");

piece[1] = Image.createImage("/BluePiece.png");

}

catch (IOException e) {

System.err.println("Failed loading images!");

}

// Initialize the arrow sprite try {

// Create the arrow sprite

arrowSprite = new Sprite(Image.createImage("/Arrow.png"), 18, 16);

arrowSprite.setFrame(0);

}

catch (IOException e) {

System.err.println("Failed loading images!");

}

// Initialize the wave players try {

InputStream is = getClass().getResourceAsStream("Legal.wav");

legalPlayer = Manager.createPlayer(is, "audio/X-wav");

legalPlayer.prefetch();

is = getClass().getResourceAsStream("Illegal.wav");

illegalPlayer = Manager.createPlayer(is, "audio/X-wav");

illegalPlayer.prefetch();

is = getClass().getResourceAsStream("Win.wav");

winPlayer = Manager.createPlayer(is, "audio/X-wav");

winPlayer.prefetch();

is = getClass().getResourceAsStream("Lose.wav");

losePlayer = Manager.createPlayer(is, "audio/X-wav");

losePlayer.prefetch();

}

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 68 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

catch (IOException ioe) { }

catch (MediaException me) { }

// Initialize the game variables gameOver = true;

myMove = false; // client always goes first curSlot = 0;

gameState = new C4State();

isServer = false;

// Start the animation thread sleeping = false;

Thread t = new Thread(this);

t.start();

btnet.query();

}

Ζ ζπλάξηεζε start() θάλεη αξθεηέο βαζηθέο ελέξγεηεο. Όπσο ηελ αξρηθνπνίεζε γηα ηα sprite νπνύ θνξηώλεη όιεο ηηο απαξαίηεηεο εηθόλεο πνπ ζα ρξεηαζηνύκε ζην παηρλίδη θαζώο θαη ηνπο ήρνπο ηνπο νπνίνπο ζα ρξεζηκνπνηήζνπκε. Σέινο δίλεη αξρηθή ηηκή ζηηο κεηαβιεηέο ηνπ παηρληδηνύ θαη μεθηλάεη ην thread ηνπ animation θαη εθηειεί έλα query έηζη ώζηε λα εληνπίζεη πηζαλνύο ρξήζηεο.

4.1.5.3.2. Η ζσνάρηηζη update_screen() ηοσ Connect 4

public void update_screen() {

// Check to see whether the game is being restarted if (gameOver) {

if(status.equals("Player connected, press fire") || status.equals("You won!") ||

status.equals("You lost!")) {

int keyState = getKeyStates();

if ((keyState & FIRE_PRESSED) != 0) { // Start a new game

isServer = true;

// Send a new game message to the other player btnet.query();

btnet.sendString("NewGame");

okFlag = false;

} }

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 69 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

if(!okFlag) {

check++;

} else {

check = 0;

}

if(check == 200) {

check = 0;

start();

}

// The game is over, so don't update anything return;

}

// Handle the left/right directional keys and the fire key if (!gameOver && myMove) {

// Process user input to move the arrow and drop piece int keyState = getKeyStates();

if ((keyState & LEFT_PRESSED) != 0) { if (--curSlot < 0)

curSlot = 0;

}

else if ((keyState & RIGHT_PRESSED) != 0) { if (++curSlot > 6)

curSlot = 6;

}

else if ((keyState & FIRE_PRESSED) != 0) { if (makeMove(isServer ? 0 : 1, curSlot)) { myMove = false;

// Send the move message to the other player btnet.sendString(Integer.toString(curSlot));

okFlag = false;

} }

arrowSprite.setPosition(

getWidth() * (curSlot + 1) / 8 - arrowSprite.getWidth() / 2, 21);

}

if(!okFlag) {

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 70 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

check++;

} else {

check = 0;

}

if(check == 1000) {

check = 0;

status = "Player didn't respond, waitting for new connection";

start();

} }

΢ηελ ζπλάξηεζε απηή είλαη ν ρεηξηζκόο ηνπ παηρληδηνύ, ην νπνίν ρσξίδεηαη ζε δύν θνκκάηηα ζηελ πξώηε if ε νπνία ρεηξίδεηαη ηηο ελέξγεηεο πνπ ζα θάλεη ν ρξήζηεο ελώ ην παηρλίδη είλαη ζηακαηεκέλν. Οπνύ ν ρξήζηεο ην κόλν πνπ κπνξεί λα θάλεη είλαη λα μεθηλήζεη έλα λέν παηρλίδη παηώληαο ην θνπκπί επηινγήο (fire button) θαη ην άιιν θνκκάηη ηεο ζπλάξηεζεο είλαη όηαλ ην παηρλίδη είλαη ζε εμέιημε θαη ν ρξήζηεο παηώληαο αξηζηεξά – δεμηά κεηαθηλεί ην βειάθη ηνπ θαη παηώληαο ην θνπκπί επηινγήο (fire button) επηιέγεη ζε πνηα ζηήιε ζέιεη λα ξίμεη ην πνύιη ηνπ. Καη ζηηο δύν πεξηπηώζεηο όηαλ ν ρξήζηεο παηήζεη ην θνπκπί επηινγήο (fire button) ζηέιλεηε έλα κήλπκα κέζσ ηνπ btnet νπνύ ελεκεξώλεηαη ν αληίπαινο ρξήζηεο γηα ηελ εθθίλεζε λένπ παηρληδηνύ ζηελ πεξίπησζε πνπ ην παηρλίδη δελ είλαη ελεξγό θαη ζηελ πεξίπησζε πνπ είλαη ελεξγό ε θίλεζε πνπ έθαλε ν ρξήζηεο. Φπζηθά ππάξρνπλ θαη νη απαξαίηεηνη πεξηνξηζκνί όπσο ην ηη status πξέπεη λα έρνπκε έηζη ώζηε ην θνπκπί ηεο επηινγήο λα ιεηηνπξγήζεη γηα αξρή ηνπ παηρληδηνύ ( λα ππάξρεη ζπλδεκέλνο ρξήζηεο ).

4.1.5.3.3. Η ζσνάρηηζη draw ηοσ Connect 4

private void draw(Graphics g) { // Fill the background

g.setColor(128, 128, 128); // gray g.fillRect(0, 0, getWidth(), getHeight());

// Draw the status message g.setColor(0, 0, 0); // black

g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD, Font.SIZE_MEDIUM));

g.drawString(status, getWidth() / 2, 2, Graphics.TOP | Graphics.HCENTER);

if (!gameOver && myMove) { // Draw the arrow sprite arrowSprite.paint(g);

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 71 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

}

// Draw the pieces for (int i = 0; i < 7; i++) for (int j = 0; j < 6; j++)

switch(gameState.board[i][j]) { case 0:

g.drawImage(piece[0],

(getWidth() * (i + 1)) / 8 - (piece[0].getWidth() / 2),

((getHeight() - 33) * (6 - j)) / 7 - (piece[0].getHeight() / 2) + 33, Graphics.TOP | Graphics.LEFT);

break;

case 1:

g.drawImage(piece[1],

(getWidth() * (i + 1)) / 8 - (piece[0].getWidth() / 2),

((getHeight() - 33) * (6 - j)) / 7 - (piece[1].getHeight() / 2) + 33, Graphics.TOP | Graphics.LEFT);

break;

default:

g.setColor(255, 255, 255); // white

g.fillArc((getWidth() * (i + 1)) / 8 - (piece[0].getWidth() / 2), ((getHeight() - 33) * (6 - j)) / 7 - (piece[0].getHeight() / 2) + 33, piece[0].getWidth(), piece[0].getHeight(), 0, 360);

break;

}

// Flush the offscreen graphics buffer flushGraphics();

}

΢ηελ ζπλάξηεζε αύηε μεθηλάκε γεκίδνληαο ηελ νζόλε κε έλα ειαθξύ γθξη ρξώκα. ΢ηελ ζπλέρεηα ζρεδηάδνπκε ςειά ζην θέληξν ηεο νζόλεο ην κήλπκα κε ηελ ηξέρσλ θαηάζηαζε ηνπ ρξήζηε, δειαδή εάλ είλαη ε ζεηξά ηνπ λα παίμεη ή πξέπεη λα πεξηκέλεη. ΢ηελ πεξίπησζε πνπ είλαη ε ζεηξά ηνπ ρξήζηε λα παίμεη ηόηε ζρεδηάδεηαη ην βειάθη. ΢ηελ ζπλέρεηα αξρίδεη ε δεκηνπξγία ηνπ ηακπιό κε ηελ βνήζεηα ηεο κεηαβιεηήο gameState ε νπνία θξαηάεη ηηο ζέζεηο κε ηα πνύιηα πνπ έρνπλ ξίμεη νη παίθηεο. Ο ζρεδηαζκόο γίλεηαη θαηά ζηήιεο. Όηαλ ην gameState επηζηξέςεη ηηκή 0 ηόηε ζρεδηάδεηαη έλα θόθθηλν πνύιη πνπ είλαη ην πνύιη ηνπ Server, ζε πεξίπησζε πνπ επηζηξέςεη ηηκή 1 ηόηε ζρεδηάδεη έλα κπιε πνύιη, ζε άιιε πεξίπησζε ζρεδηάδεη έλα ιεπθό πνύιη ην νπνίν ζηελ νπζία είλαη κηα θελή ζέζε.

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 72 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

4.1.5.3.4. Η ζσνάρηηζη newGame() ηοσ Connect 4

public void newGame() { // Initialize the game variables gameOver = false;

curSlot = 0;

gameState = new C4State();

arrowSprite.setFrame(isServer ? 0 : 1);

// ananewsi the status message

status = myMove ? "Your turn." : "Waiting for player's move...";

}

Ζ δνπιεία ηεο ζπλάξηεζεο απηήο είλαη απιά λα αξρηθνπνίεζε όιεο ηηο κεηαβιεηέο θαη λα αλαλέσζε ην κήλπκα ηεο θαηάζηαζεο ηνπ ρξήζηε (status message).

4.1.5.3.5. Η ζσνάρηηζη receiveMessage() ηοσ Connect 4 public void receiveMessage(String message) {

if(message.equals("Exit")) {

status = "The opponent left";

btnet.disconnect();

stop();

start();

btnet.query();

}

if(message.equals("Connected")) {

status = "Player connected, press fire";

btnet.sendString("Connection done");

repaint();

}

if(message.equals("Connection done")) {

status = "Player connected, press fire";

repaint();

}

if (gameOver) {

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 73 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

// Check for a new game message if (message.equals("NewGame")) {

isServer = false;

myMove = true;

newGame();

btnet.sendString("OK");

btnet.sendString("Start");

}

if(message.equals("Start") && isServer) {

myMove = false;

newGame();

btnet.sendString("OK");

btnet.sendString("Ready");

} } else {

if (!myMove) {

// Attempt to receive a numeric move try {

// Carry out the other player's move int slot = Integer.parseInt(message);

if (slot >= 0 && slot <= 6) {

if (makeMove(isServer ? 1 : 0, slot)) {

myMove = true;

btnet.sendString("OK");

} } }

catch (NumberFormatException nfe) { }

}

if(message == "Ready" && !isServer) {

btnet.sendString("OK");

myMove = true;

newGame();

}

if(message == "OK") {

okFlag = true;

} } }

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 74 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

Ζ ζπλάξηεζε απηή είλαη ε θαξδία ηεο επηθνηλσλίαο κεηαμύ ησλ ρξεζηώλ. Υσξίδεηαη ζε ηξία θνκκάηηα. Σν πξώην είλαη νη αληαιιαγέο κελπκάησλ πνπ γίλνληαη πξηλ αξρίζεη ην παηρλίδη θαη γίλεηαη ν ζπγρξνληζκόο ησλ δύν παηρηώλ ώζηε λα κπνξέζνπλ λα ζπλδεζνύλ θαη λα γίλεη ην παηρλίδη ( “Connected” , “Connection Done” ) , ν ρξήζηεο θάλεη αλαδήηεζε γηα ηνλ άιιν ρξήζηε θαη αθνύ ηνλ βξεη ζηέιλεη ην κήλπκα θαη πεξηκέλεη αληαπόθξηζε, γηα ηνλ ίδην ιόγν έρνπκε θαη ην κήλπκα “OK” ην νπνίν είλαη γηα ηελ επηβίσζε όηη ιάβακε ην κήλπκα πνπ έζηεηιε ν ρξήζηεο. Σν δεύηεξν θνκκάηη αλαθέξεηε ζηελ αληαιιαγή ησλ κελπκάησλ εθόζνλ έρεη επηηεπρζεί ε ζύλδεζε ησλ δύν ρξεζηώλ ηα νπνία είλαη ε αίηεζε λένπ παηρληδηνύ (“newgame”) θαη ηα κελύκαηα “Start” θαη “Ready”

είλαη γηα επηβεβαίσζε όηη θαη νη δύν ρξήζηεο είλαη έηνηκνη λα παίμνπλ. Σειεπηαίν θαη ηξίην θνκκάηη αλαθέξεηε ζηηο θηλήζεηο ησλ παηρηώλ νπνύ είλαη ζην θνκκάηη ηεο if(!myMove) όπνπ ιακβάλνπκε θαη παίδνπκε ηελ θίλεζε ηνπ παίρηε.

4.1.5.3.6. Η ζσνάρηηζη makeMove() ζηο Connect 4

private boolean makeMove(int player, int slot) { // Drop the piece

if (gameState.dropPiece(player, slot) == -1) { // Play a wave sound for an illegal move try {

illegalPlayer.start();

}

catch (MediaException me) { }

return false;

}

// Play a wave sound for a legal move try {

legalPlayer.start();

}

catch (MediaException me) { }

// See whether the game is over if (gameState.isWinner(player)) {

if ((isServer && (player == 0)) || (!isServer && (player == 1))) { // Play a wave sound for winning the game

try {

winPlayer.start();

}

catch (MediaException me) {

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 75 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

}

status = "You won!";

} else {

// Play a wave sound for losing the game try {

losePlayer.start();

}

catch (MediaException me) { }

status = "You lost!";

}

gameOver = true;

}

else if (gameState.isTie()) {

// Play a wave sound for tying the game try {

losePlayer.start();

}

catch (MediaException me) { }

status = "The game ended in a tie!";

gameOver = true;

} else {

// ananewsi the status message

status = myMove ? "Waiting for other player..." : "Your turn.";

}

if(gameOver) {

isServer = false;

myMove = false;

}

return true;

} }

΢ε απηήλ ηελ ζπλάξηεζε γίλνληαη νη θηλήζεηο ηνπ ρξήζηε. Σν πξώην βήκα είλαη ε απόπεηξα λα πεξαζηεί ε θίλεζε ηνπ ρξήζηε θαη ιέκε απόπεηξα γηαηί ε θίλεζε πεξληέηαη ζηελ κεηαβιεηή gameState αιιά δελ είλαη απαξαίηεην όηη ζα ηελ δερηεί. ΢ε πεξίπησζε πνπ δε ηελ δερηεί παίδεηαη ν ήρνο πνπ είρακε δειώζεη γηα illegalPlayer θαη ζηελ ζπλέρεηα βγαίλνπκε από ηελ ζπλάξηεζε επηζηξέθνληαο ηελ ηηκή false όηη δειαδή ε θίλεζε δελ πξαγκαηνπνηήζεθε. ΢ηελ πεξίπησζε ηώξα πνπ ε θίλεζε πνπ έθαλε ν ρξήζηεο είλαη έγθπξε παίδεηαη ν ήρνο ηεο έγθπξεο θίλεζεο θαη ζηελ ζπλέρεηα γίλεηαη ν έιεγρνο εάλ

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 76 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

έρνπκε ληθεηή. ΢ε πεξίπησζε πνπ έρνπκε ληθεηή θνηηάκε εάλ λίθεζε ν server ή ν client ώζηε λα βγάινπκε ην αληίζηνηρν κήλπκα ζηνλ ρξήζηε θαη θπζηθά αθνύ έρνπκε ληθεηή ζηακαηάκε θαη ην παηρλίδη θάλνληαο ηελ κεηαβιεηή gameOver = true. Αθόκα ππάξρεη θαη ε πεξίπησζε ε θίλεζε πνπ θάλακε λα ήηαλ ε ηειεπηαία θαη εθόζνλ δελ είρακε ληθεηή ην παηρλίδη θξίλεηε σο ηζνπαιία θαη βγαίλεη ην αληίζηνηρν κήλπκα θαη θπζηθά πάιη ην παηρλίδη ηειεηώλεη. Σέινο ζε πεξίπησζε πνπ ην παηρλίδη έρεη ηειεηώζεη αξρηθνπνηνύληαη νη ηηκέο ηνπ isServer θαη ηεο κεηαβιεηήο myMove έηζη ώζηε λα κελ δεκηνπξγεζνύλ πξνβιήκαηα εάλ νη ρξήζηεο ζειήζνπλ λα παίμνπλ θαη άιιν έλα παηρλίδη.

4.1.5.4 Η κλάζε C4State

Καη γηα λα ηειεηώζνπκε θαη κε ηελ αλάιπζε ηνπ παηρληδηνύ κέλεη λα αλαιύζνπκε θαη ηελ θιάζε πνπ θξαηάεη ηηο ζέζεηο πνπ παίμαλε νη ρξήζηεο θαζώο θαη ηελ θαηάζηαζε ηνπ παηρληδηνύ.

4.1.5.4.1. Μεηαβληηές ηης κλάζης C4State

private static boolean[][][] map;

private int[][] score = new int[2][winPlaces];

public static final int winPlaces = 69, maxPieces = 42, Empty = 2;

private int numPieces;

public int[][] board = new int[7][6];

Θα μεθηλήζνπκε από ηνλ αιγόξηζκν κε ην νπνίν ππνινγίδνληαη αξρηθά νη πηζαλέο ληθεηήξηεο ζέζεηο. Έηζη έρνπκε

winPlaces = 4*w*h – 3*w*n – 3*h*n + 3*w + 3*h - 4*n + 2*n*n

νπνύ w είλαη ην κήθνο ηνπ ηακπιό (width), h είλαη ην ύςνο ηνπ ηακπιό (height) θαη n είλαη ν αξηζκόο ησλ πνπιηώλ πνπ έρνπλ ηνπνζεηεζεί ζην ηακπιό. Σν παηρλίδη καο είλαη 7x6 νπόηε εάλ γίλνπλ νη ππνινγηζκνί ζα βγεη 69 πηζαλέο ληθεηήξηεο ζέζεηο.

maxPieces είλαη ν κέγηζηνο αξηζκόο πνπιηώλ πνπ κπνξνύκε λα έρνπκε, ζηελ πεξίπησζε καο είλαη 42. Με απηόλ ηνλ ηξόπν κπνξνύκε λα θαηαιάβνπκε θαη όηη έρνπκε ηζνπαιία, δειαδή όηαλ θαλείο από ηνπο ρξήζηεο δελ έρεη θεξδίζεη αιιά ν αξηζκόο ησλ πνπιηώλ έρεη θηάζεη ησλ κέγηζην αξηζκό πνπιηώλ πνπ κπνξνύκε λα ρξεζηκνπνηήζνπκε.

Έρνπκε ηελ κεηαβιεηή board νπνύ είλαη ην ηακπιό καο. Οη ηηκέο πνπ ζα παίξλεη είλαη 0 γηα ηνλ server, 1 γηα ηνλ client θαη 2 γηα θελή ζέζε.

΢ηελ αξρή ζηηο κεηαβιεηέο έρνπκε έλαλ ηξηζδηάζηαην πηλάθα, απηόο ρξεζηκεύεη ώζηε λα κπνξνύκε λα ππνινγίζνπκε πάλσ ζην ηακπιό όιεο ηηο πηζαλέο ληθεηήξηεο ζέζεηο θαη λα δνύκε εάλ έρνπκε θάπνηα από απηέο. Όπσο είλαη δειαδή ην ηακπιό ζθεθηείηε θαη άιιε

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 77 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

κηα δηάζηαζε ε νπνία είλαη θνιιεκέλε πάλσ ζην ηακπιό, θάηη ζαλ έλα δεύηεξν ηακπιό ζην νπνίν ζεκεηώλνπκε όιεο ηνπο δπλαηνύο ζπλδπαζκνύο.

Σέινο ζηελ κεηαβιεηή score ην πξόγξακκα θνηηάεη πόζα πνύιηα ππάξρνπλ ζηελ ζεηξά θαη γηα θάζε έλα από απηά βγάδεη έλα λνύκεξν, πην ζπγθεθξηκέλα αλαβαίλεη ζε δπλάκεηο ηνπ 2 θάζε θόξα πνπ βξίζθεη πνύιη ην νπνίν είλαη πηζαλό λα είλαη κηα ληθεηήξηα ζηήιε.

Γηα παξάδεηγκα εάλ ν ρξήζηεο έρεη 2 πνύιηα ζηελ ζεηξά ηόηε ζα έρνπκε 2*2*2 = 23 = 8, όπσο θαηαιαβαίλεηαη ην κεγαιύηεξν score πνπ ζα κπνξέζνπκε λα έρνπκε είλαη 24 = 16.

4.1.5.4.2. Ο δημιοσργός ηης κλάζης C4State

public C4State() { // Initialize the map int i, j, k, count = 0;

if (map == null) {

map = new boolean[7][6][winPlaces];

for (i = 0; i < 7; i++) for (j = 0; j < 6; j++)

for (k = 0; k < winPlaces; k++) map[i][j][k] = false;

// Set the horizontal win positions for (i = 0; i < 6; i++)

for (j = 0; j < 4; j++) { for (k = 0; k < 4; k++) map[j + k][i][count] = true;

count++;

}

for (i = 0; i < 7; i++) for (j = 0; j < 3; j++) { for (k = 0; k < 4; k++) map[i][j + k][count] = true;

count++;

}

for (i = 0; i < 3; i++) for (j = 0; j < 4; j++) { for (k = 0; k < 4; k++)

map[j + k][i + k][count] = true;

count++;

}

// Set the backward diagonal win positions

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 78 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

for (i = 0; i < 3; i++) for (j = 6; j >= 3; j--) { for (k = 0; k < 4; k++)

map[j - k][i + k][count] = true;

count++;

} }

// Initialize the board for (i = 0; i < 7; i++) for (j = 0; j < 6; j++) board[i][j] = Empty;

// Initialize the scores for (i = 0; i < 2; i++)

for (j = 0; j < winPlaces; j++) score[i][j] = 1;

numPieces = 0;

}

΢ηνλ δεκηνπξγό όπσο ήηαλ θπζηθό γίλεηαη ε δεκηνπξγία θαη ε αξρηθνπνίεζε όισλ ησλ πηλάθσλ πνπ είλαη απαξαίηεηνη γηα ην παηρλίδη

4.1.5.4.3. Η ζσνάρηηζη isWinner() ηοσ C4State

public boolean isWinner(int player) { // See whether the player has won for (int i = 0; i < winPlaces; i++) if (score[player][i] == 16) return true;

return false;

}

΢ε απηήλ ηελ ζπλάξηεζε απηό πνπ θάλεη ην πξόγξακκα είλαη λα δεη εάλ έρνπκε θάπνηα ληθεηήξηα ηεηξάδα, απηό θαίλεηαη από ηνλ πίλαθα score όηαλ έρνπκε πάξνπκε ηελ ηηκή 16, όπσο αλαθέξακε θαη παξαπάλσ.

4.1.5.4.4. Η ζσνάρηηζη isTie() ηοσ C4State

public boolean isTie() { // See whether there is a tie

return (numPieces == maxPieces);

}

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 79 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

΢ε απηήλ ηελ ζπλάξηεζε θνηηάκε εάλ ην παηρλίδη είλαη ηζόπαιν θαη απηό γίλεηαη απιά θνηηώληαο ηα παηγκέλα πνύιηα θαη ηνλ αξηζκό ησλ πνπιηώλ πνπ κπνξνύλ λα παηρηνύλ, εάλ απηά είλαη ίζα ηόηε έρνπκε ηζνπαιία.

4.1.5.4.5. Η ζσνάρηηζη dropPiece() ηοσ C4State

public int dropPiece(int player, int xPos) { // See whether the slot has room for the piece int yPos = 0;

while ((board[xPos][yPos] != Empty) && (++yPos < 6)) ;

// The slot is full if (yPos == 6) return -1;

// The slot has room, so drop the piece board[xPos][yPos] = player;

numPieces++;

updateScore(player, xPos, yPos);

return yPos;

}

΢ε απηήλ ηελ ζπλάξηεζε παίξλνπκε ηελ θίλεζε ηνπ ρξήζηε θαη δνθηκάδνπκε λα ξίμνπκε ην πνύιη ζηελ ζηήιε πνπ ζέιεη ν ρξήζηεο. Αθνύ εμαζθαιίζνπκε όηη ε ζηήιε δελ είλαη γεκάηε ηόηε απνζεθεύνπκε ηνλ ρξήζηε θαη ηελ ζέζε πνπ έπαημε θαη ζηελ ζπλέρεηα αλαλεώλνπκε ην πίλαθα ηνπ score κε ηελ λέα θίλεζε.

4.1.5.4.6. Η ζσνάρηηζη updateScore() ηοσ C4State

private void updateScore(int player, int x, int y) { // update the score for the specified piece

for (int i = 0; i < winPlaces; i++) if (map[x][y][i]) {

score[player][i] <<= 1;

score[1 - player][i] = 0;

} }

Ζ ζπλάξηεζε αύηε όπσο κπνξνύκε λα θαηαιάβνπκε θαη από ην όλνκα ηεο δίλεη ηηο λέεο ηηκέο ζηνλ πίλαθα score.

Γεκηοσργία ειεθηροληθού παητληδηού ποιιώλ τρεζηώλ κέζφ Bluetooth γηα θηλεηά ηειέθφλα

Α.Σ.Δ.Ι. Καβάιας – Βηοκεταληθή Πιεροθορηθή ΢ειίδα 80 από 115 Κατηοσηέας Λούης e-mail : l_kahiouteas@yahoo.com

Documentos relacionados