为了应付Java老师,借鉴了同学思想,自己动手敲了一个四子棋游戏。代码很不规范,为了赶时间。结果写的和C语言一样。源码在本文结尾处
首先看看游戏规则,
游戏规则
四子棋的棋盘共有6行7列,棋盘是垂直摆放,每名玩者有21只圆形棋子,以不同颜色辨别。两名玩者轮流每次把一只棋子放进棋盘任何未全满的一行中,棋子会占据一行中最底未被占据的位置。两名玩者任何一方先以四只棋子在横,竖或斜方向联成一条直线,便可获胜,游戏亦结束。假如棋盘已完全被棋子填满,但仍未有任何一方成功把四只棋子成一直线,则成为和局。
棋盘
用了一个二维数组6*7的二维数组来构造棋盘。每次选择要下的行号行号即可。
isfour()
用来判断下的棋有没有连成四字,每次下完都判断一次。
judge()
用来判断所下的棋成功与否,即所下位置是否有棋和棋盘是否能放下
主要用了就这么多,只创建了一个类connect类来建立一个四子棋游戏。。。。
package connect;
import java.util.*;
public class connect
{
public static void main(String args[])
{
int start=0;
int count=0;
int count_max=42;
connect_four one=new connect_four();
one.display_board();
do
{
System.out.println("请白子先行");
Scanner in=new Scanner(System.in);
int cow=in.nextInt();
if(one.judge(cow, 1) == 1)
{
start=1;count++;
}
else
{
start=0;
}
}
while(start==0);
one.display_board();
System.out.println();
int color=2;
do
{
//one.getcolor();
System.out.println("对手出棋");
Scanner in=new Scanner(System.in);
//int raw=in.nextInt();
int cow=in.nextInt();
if(one.judge(cow,color)==0)
{
System.out.println("出棋失败,请重新出棋");
}
else
{
count++;
if(one.is_four(cow, color, 0, 1)==1)
{
if(color==1)
System.out.print("\t\t\t\t圈圈");
else
System.out.print("\t\t\t\t叉叉");
System.out.print("胜出\n");
one.display_board();
System.out.println();
return ;
}
if(color==2)color=1;
else color=2;
}
one.display_board();
}
while(count<count_max);
if(count==count_max)
{
System.out.println("\t\t\t\t\t和局");
one.display_board();
System.out.println();
}
}
}
class connect_four
{
private int flag=0; //
private int max_i=6; //最大行
private int max_j=7; //最大列
private int row; //行值
private int cow; //列值
private int [] []chessboard_status=new int[6][7];//棋盘状态
private int [] a = new int[7]; //列的行值
private int chess_color; //棋子颜色
public connect_four() //构造函数初始化棋盘
{
flag=0;
max_i=6;
max_j=7;
row=0;
cow=0;
for(int i=0;i<max_i;i++)
{
for(int j=0;j<max_j;j++)
{
a[j] = 5;
chessboard_status[i][j]=0;
}
}
}
public int judge(int j,int color)
{
switch(j)
{
case 0: if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}//二维数
//组存放
else return 0;
case 1: if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
else return 0;
case 2: if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
else return 0;
case 3: if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
else return 0;
case 4: if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
else return 0;
case 5: if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
else return 0;
case 6: if(a[j]>=0) {chessboard_status[a[j]][j]=color;a[j]--;break;}
else return 0;
default: ;
}
return 1;
}
public int judge_status(int i,int j)
{
if(i>-1&&i<max_i&&j>-1&&j<max_j)
if(chessboard_status[i][j]==0)
return 0;
else if(chessboard_status[i][j]==1)
return 1;//白色
else
return 2;//黑色
else return -1;//位置输入超框
}
public void getcolor()
{
if(flag==1)
System.out.print("白棋");
else
System.out.print("黑棋");
System.out.println("\n");
}
public void display_board()
{
char a=1;
char b=0;
System.out.print(" ");
for(int j=0;j<max_j;j++)
{
System.out.print(j+" ");
}
System.out.println();
for(int i=0;i<max_i;i++)
{
for(int j=0;j<max_j;j++)
{
if(j==0)
System.out.print(i);
switch(chessboard_status[i][j])
{
case 0: System.out.print(" *");break;
case 1: System.out.print(" ○");break;
case 2: System.out.print(" ×");break;
}
}
System.out.println();
}
}
public int is_four(int j,int color,int num,int direction)
{
int m=a[j]+1,n=j;
do
{
switch(direction)
{
case 1: m=m+1;n=n;break;
case 2: m=m+1;n=n-1;break;
case 3: m=m;n=n-1;break;
case 4: m=m-1;n=n-1;break;
case 5: m=m-1;n=n;break;
case 6: m=m-1;n=n+1;break;
case 7: m=m;n=n+1;break;
case 8: m=m-1;n=n-1;break;
default :break;
}
if(judge_status(m,n)==color)
{
num++;
if(num==3)
{
return 1;
}
}
else
{
m=a[j]+1;
n=j;
num=0;
direction++;
}
}while(direction!=9);
if(num==3) return 1;
else return 0;
}
}