Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Game game;
- void setup(){
- int activePlayer = 2;
- int status = 0;
- // GameMode:
- // 0 - CPU vs Player
- // 1 - Player vs Player
- int gameMode = 0;
- size(500, 600);
- background(250,250,250);
- smooth(2);
- game = new Game(activePlayer, status, gameMode);
- }
- void draw(){
- game.drawGameArea();
- game.gameModeType();
- game.statusType();
- }
- void keyPressed(){
- game.onKeyPress();
- }
- void mousePressed(){
- game.onMousePress();
- game.checkWinner();
- }
- class Game{
- private int activePlayer;
- private int status;
- private int gameMode;
- private Field[][] gameArea;
- Game(int activePlayer, int status, int gameMode){
- this.activePlayer = activePlayer;
- this.status = status;
- this.gameMode = gameMode;
- this.createGameArea();
- }
- void setActivePlayer(int player) { this.activePlayer = player; }
- void setStatus(int status) { this.status = status; }
- void setGameMode(int mode) { this.gameMode = mode; }
- int getActivePlayer() { return this.activePlayer; }
- int getStatus() { return this.status; }
- int getGameMode() { return this.gameMode; }
- void createGameArea(){
- gameArea = new Field[3][3];
- for(int i = 0; i < 3; i++){
- for(int j = 0; j < 3; j++){
- this.gameArea[i][j] = new Field(width / 3 * i, 30 + width / 3 * j, width / 3, width / 3);
- }
- }
- }
- void drawGameArea(){
- for(int i = 0; i < 3; i++){
- for(int j = 0; j < 3; j++){
- this.gameArea[i][j].draw();
- }
- }
- }
- void gameModeType(){
- int r1, r2;
- if(gameMode == 0){
- if(activePlayer == 1 && status == 0){
- do{
- r1 = int(random(0,3));
- r2 = int(random(0,3));
- if(!gameArea[r1][r2].haveOwner()){
- gameArea[r1][r2].setOwner(2);
- gameArea[r1][r2].draw();
- checkWinner();
- switchPlayer();
- break;
- }
- }while(true);
- }
- }
- }
- void statusType(){
- if(status == 1){
- fill(0);
- textSize(15);
- smooth();
- text("Wciśnij dowolny przycisk by zrestartować grę", width / 2 - width / 3, height - 40);
- fill(250);
- }
- }
- void onKeyPress(){
- println("key pressed " + keyCode + ", current game status: " + this.status);
- if(status == 1){
- for(int i = 0; i < 3; i++){
- for(int j = 0; j < 3; j++){
- gameArea[i][j] = null;
- gameArea[i][j] = new Field(width / 3 * i, 30 + width / 3 * j, width / 3, width / 3);
- gameArea[i][j].setOwner(0);
- background(250,250,250);
- rect(-5,-5,700,700);
- status = 0;
- }
- }
- println("New game created");
- }
- }
- void onMousePress(){
- if(status == 0){
- if(gameMode == 0 && activePlayer == 2){
- for(int i = 0; i < 3; i++){
- for(int j = 0; j < 3; j++){
- gameArea[i][j].onClick(mouseX, mouseY, game);
- }
- }
- }
- else if(gameMode == 1){
- for(int i = 0; i < 3; i++){
- for(int j = 0; j < 3; j++){
- gameArea[i][j].onClick(mouseX, mouseY, game);
- }
- }
- }
- }
- }
- boolean isDraw(){
- int avalaibleFields = 0;
- for(int i = 0; i < 3; i++){
- for(int j = 0; j < 3; j++){
- if(gameArea[i][j].haveOwner()) avalaibleFields++;
- }
- }
- if(avalaibleFields == 9) { this.status = 1; return true; }
- else return false;
- }
- void checkWinner(){
- if(this.getWinner()>0 || this.isDraw()) this.status = 1;
- }
- void switchPlayer(){
- if(this.activePlayer == 2) this.activePlayer = 1;
- else this.activePlayer = 2;
- println("Player switched: " + this.activePlayer);
- }
- int getWinner(){
- int probablyWinner;
- //Cols
- for(int i = 0; i < 3; i++){
- probablyWinner = gameArea[i][0].getOwner();
- if(probablyWinner != 0){
- if(probablyWinner == gameArea[i][1].getOwner() && probablyWinner == gameArea[i][2].getOwner()){
- drawLine(gameArea[i][0], gameArea[i][2], 2);
- return probablyWinner;
- }
- }
- }
- //Rows
- for(int i = 0; i < 3; i++){
- probablyWinner = gameArea[0][i].getOwner();
- if(probablyWinner != 0){
- if(probablyWinner == gameArea[1][i].getOwner() && probablyWinner == gameArea[2][i].getOwner()){
- drawLine(gameArea[0][i], gameArea[2][i], 1);
- return probablyWinner;
- }
- }
- }
- //Crossed 1
- probablyWinner = gameArea[0][0].getOwner();
- if(probablyWinner != 0){
- if(probablyWinner == gameArea[1][1].getOwner() && probablyWinner == gameArea[2][2].getOwner()){
- drawLine(gameArea[0][0], gameArea[2][2], 3);
- return probablyWinner;
- }
- }
- //Crossed 2
- probablyWinner = gameArea[0][2].getOwner();
- if(probablyWinner != 0){
- if(probablyWinner == gameArea[1][1].getOwner() && probablyWinner == gameArea[2][0].getOwner()){
- drawLine(gameArea[0][2], gameArea[2][0], 4);
- return probablyWinner;
- }
- }
- return 0;
- }
- void drawLine(Field f1, Field f2, int type){
- int x1 = f1.getPosX();
- int y1 = f1.getPosY();
- int x2 = f2.getPosX();
- int y2 = f2.getPosY();
- int w = f1.getWidth();
- int h = f1.getHeight();
- stroke(0,0,0);
- switch(type){
- case 1:
- line(x1,y1+(h/2),x2+w,y2+(h/2));
- break;
- case 2:
- line(x1+(w/2),y1,x2+(w/2),y2+h);
- break;
- case 3:
- line(x1,y1,x2+w,y2+h);
- break;
- case 4:
- line(x1,y1+h,x2+w,y2);
- break;
- }
- }
- }
- class Field{
- private int x, y, w, h, owner;
- Field(int posX, int posY, int fieldWidth, int fieldHeight){
- this.x = posX;
- this.y = posY;
- this.w = fieldWidth;
- this.h = fieldHeight;
- }
- void setOwner(int player){ this.owner = player; }
- int getPosX(){ return this.x; }
- int getPosY(){ return this.y; }
- int getHeight(){ return this.h; }
- int getWidth(){ return this.w; }
- int getOwner(){ return this.owner; }
- void draw(){
- noFill();
- stroke(80);
- strokeWeight(5);
- rect(x, y, w, h);
- stroke(150,0,150, 160);
- if(getOwner() == 1){
- stroke(200,0,0);
- ellipseMode(CORNER);
- ellipse(x+30, y+30, w-60, w-60);
- }
- else if(getOwner() == 2){
- stroke(0,150,0);
- line(x+40, y+40, x+w-40, y+h-40);
- line(x+w-40, y+40, x+40, y+h-40);
- }
- else{
- }
- }
- void onClick(int x1, int y1, Game game){
- if(!haveOwner()){
- if(x1 > this.x && x1 < this.x + this.w && y1 > this.y && y1 < this.y + this.h){
- game.switchPlayer();
- this.setOwner(game.getActivePlayer());
- }
- }
- }
- boolean haveOwner(){
- if(owner==0) return false;
- else return true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement