前言
小白正在学c,但专业教材直接学java,并且要求java写一篇五子棋,但c与java相近,并且之前写过井字棋,所以中间也没什么问题,很快就能写出来,之后也有可能出一篇详解代码的部分
代码部分
public static char is_win(char board[][])
{
//棋盘判断
int qi_pan=0;
for(int rows=0;rows<10;rows++)
{
for(int cols=0;cols<10;cols++)
{
if(qi_pan==1)
break;
if(board[rows][cols]=='-')
qi_pan=1;
}
}
//横列判断
char qi_zi='n';
int p1_iswin=0;
int p2_iswin=0;
for(int rows=0;rows<10;rows++)
{
p1_iswin=0;
p2_iswin=0;
for(int cols=0;cols<10;cols++)
{
if(board[rows][cols]=='-')
{
p1_iswin=0;
p2_iswin=0;
}
if(board[rows][cols]=='*')
{
p1_iswin++;
p2_iswin=0;
}
if(p1_iswin==5)
{
qi_zi='*';
break;
}
if(board[rows][cols]=='0')
{
p1_iswin=0;
p2_iswin++;
}
if(p2_iswin==5)
{
qi_zi='0';
break;
}
}
}
//竖列判断
if(qi_zi=='n')
{
for(int rows=0;rows<10;rows++)
{
p1_iswin=0;
p2_iswin=0;
for(int cols=0;cols<10;cols++)
{
if(board[cols][rows]=='-')
{
p1_iswin=0;
p2_iswin=0;
}
if(board[cols][rows]=='*')
{
p1_iswin++;
p2_iswin=0;
}
if(p1_iswin==5)
{
qi_zi='*';
break;
}
if(board[cols][rows]=='0')
{
p1_iswin=0;
p2_iswin++;
}
if(p2_iswin==5)
{
qi_zi='0';
break;
}
}
}
}
//左上对角线判断
if(qi_zi=='n')
{
for(int i=0;i<=5;i++)
{
p1_iswin=0;
p2_iswin=0;
int rows=i;
int cols=0;
int rows_right=10;
int cols_right=10-i;
while(rows<rows_right&&cols<cols_right)
{
if(board[rows][cols]=='-')
{
p1_iswin=0;
p2_iswin=0;
}
if(board[cols][rows]=='*')
{
p1_iswin++;
p2_iswin=0;
}
if(p1_iswin==5)
{
qi_zi='*';
break;
}
if(board[cols][rows]=='0')
{
p1_iswin=0;
p2_iswin++;
}
if(p2_iswin==5)
{
qi_zi='0';
break;
}
rows++;
cols++;
}
}
}
//左上上部分对角线判断
if(qi_zi=='n')
{
for(int i=0;i<=5;i++)
{
p1_iswin=0;
p2_iswin=0;
int rows=0;
int rows_right=10-i;
int cols=i;
int cols_right=10;
while(rows<rows_right&&cols<cols_right)
{
if(board[rows][cols]=='-')
{
p1_iswin=0;
p2_iswin=0;
}
if(board[rows][cols]=='*')
{
p1_iswin++;
p2_iswin=0;
}
if(p1_iswin==5)
{
qi_zi='*';
break;
}
if(board[rows][cols]=='0')
{
p1_iswin=0;
p2_iswin++;
}
if(p2_iswin==5)
{
qi_zi='0';
break;
}
rows++;
cols++;
}
}
}
//右上对角线上半部分判断
if(qi_zi=='n')
{
for(int i=0;i<=5;i++)
{
p1_iswin=0;
p2_iswin=0;
int row=i;
int row_right=9;
int col=9;
int col_right=i;
while(row<=row_right&&col>=col_right)
{
if(board[row][col]=='-')
{
p1_iswin=0;
p2_iswin=0;
}
if(board[row][col]=='*')
{
p1_iswin++;
p2_iswin=0;
}
if(p1_iswin==5)
{
qi_zi='*';
break;
}
if(board[row][col]=='0')
{
p1_iswin=0;
p2_iswin++;
}
if(p2_iswin==5)
{
qi_zi='0';
break;
}
row++;
col--;
}
}
}
//右上对角线上半部分
if(qi_zi=='n')
{
for(int i=0;i<=5;i++)
{
p1_iswin=0;
p2_iswin=0;
int rows=0;
int row_right=9-i;
int col=9-i;
int col_right=0;
while(col>=col_right&&rows<=row_right)
{
if(board[rows][col]=='-')
{
p1_iswin=0;
p2_iswin=0;
}
if(board[rows][col]=='*')
{
p1_iswin++;
p2_iswin=0;
}
if(p1_iswin==5)
{
qi_zi='*';
break;
}
if(board[rows][col]=='0')
{
p1_iswin=0;
p2_iswin++;
}
if(p2_iswin==5)
{
qi_zi='0';
break;
}
rows++;
col--;
}
}
}
if(qi_zi=='0')
return '0';
if(qi_zi=='*')
return'*';
if(qi_pan==1)
return 'n';
if(qi_pan==0)
return 'y';
return 'z';
}
//游戏开始0 *
public static int game(char board[][])
{
int no=0;
int flag=0;
while(flag==0)
{
Scanner rua=new Scanner(System.in);
if(no==0)
{
System.out.println("*:please input the number");
int zuo_biao=rua.nextInt();
int cols=zuo_biao%10;
int rows=zuo_biao/10%10;
if(board[rows][cols]!='-')
{
continue;
}
board[rows][cols]='*';
menu(board);
char f=is_win(board);
if(f=='0')
{
System.out.println("0 winner!!");
return 0;
}
else if(f=='*')
{
System.out.println("* winner!!");
return 0;
}
else if(f=='y')
{
System.out.println("no winner");
return 0;
}
}
System.out.println("0:please input the number");
int zuo_biao=rua.nextInt();
int cols=zuo_biao%10;
int rows=zuo_biao/10%10;
if(board[rows][cols]!='-')
{
no=1;
continue;
}
else
{
no=0;
}
board[rows][cols]='0';
menu(board);
char r=is_win(board);
if(r=='0')
{
System.out.println("0 winner!!");
return 0;
}
else if(r=='*')
{
System.out.println("* winner!!");
return 0;
}
else if(r=='y')
{
System.out.println("no winner");
return 0;
}
}
return 0;
}
//用户选择开始游戏或退出游戏
public static int select()
{
System.out.println("play: 1");
System.out.println("exit 0");
Scanner sc=new Scanner(System.in);
int flag=sc.nextInt();
return flag;
}
//棋盘初始化
public static void init(char board[][])
{
for(int u=0;u<10;u++)
{
for(int i=0;i<10;i++)
{
board[u][i]='-';
}
}
}
//棋盘打印
public static void menu(char board[][])
{
System.out.print(" ");
for(int rpw=0;rpw<10;rpw++)
{
System.out.print(" ");
System.out.print(""+rpw);
}
System.out.println("");
for(int rows=0;rows<10;rows++)
{
System.out.print(""+rows);
System.out.print(" ");
for(int cols=0;cols<10;cols++)
{
System.out.print(""+board[rows][cols]);
System.out.print(" ");
}
System.out.println("");
}
}
//主函数
public static void main(String[] args)
{
char[][] board=new char[10][10];
int flag=1;
do
{
flag=select();
switch(flag)
{
case 1:
{
init(board);
menu(board);
game(board);
break;
}
case 0:
{
break;
}
default:
{
System.out.println("error number,please input the right number again");
}
}
}
while(flag!=0);
}