3D游戏编程第二次作业——井字棋
1. 概述
本次作业主要使用了OnGUI实现简单的井字棋游戏。其中主要有初始化、判断游戏是否结束以及交互界面绘制这几个模块。下面进行介绍。
2.成员变量与初始化
定义的成员变量有三个:代表棋盘状态的二元整型数组board、代表当前玩家的int类型的curPlayer(1,2代表玩家)、代表赢家的int类型的winner。
int[,] board= new int[3,3];
int curPlayer = 1;
int winner = 0;
初始化就是将棋盘状态变为0,赢家设为0,玩家设为1。
void Init(){
for(int i = 0;i<3;i++){
for(int j = 0;j<3;j++){
board[i,j] = 0;
}
}
curPlayer = 1;
winner = 0;
}
2.游戏结束状态的判断
游戏结束的状况就是六种三点一线和摆满棋盘七种情况,比较简单,于是直接用判断语句来写(就是有点蠢)。
bool gameOver(){
if(board[0,0]==board[1,1]&&board[1,1]==board[2,2]&&board[0,0]!=0
|| board[0,0]==board[0,1]&&board[0,1]==board[0,2]&&board[0,0]!=0
|| board[0,0]==board[1,0]&&board[1,0]==board[2,0]&&board[0,0]!=0){
if(board[0,0]==1) winner = 1;
else winner = 2;
return true;
}
if(board[2,2]==board[2,1]&&board[2,1]==board[2,0]&&board[2,2]!=0
||board[2,2]==board[1,2]&&board[1,2]==board[0,2]&&board[2,2]!=0){
if(board[2,2]==1) winner = 1;
else winner = 2;
return true;
}
if(board[2,0]==board[1,1]&&board[1,1]==board[0,2]&&board[2,0]!=0){
if(board[2,0]==1) winner = 1;
else winner = 2;
return true;
}
bool end = true;
for(int i = 0;i<3;i++){
for(int j = 0;j<3;j++){
if(board[i,j]==0){
end= false;
break;
}
}
}
return end;
}
void Init(){
for(int i = 0;i<3;i++){
for(int j = 0;j<3;j++){
board[i,j] = 0;
}
}
curPlayer = 1;
winner = 0;
}
3.交互界面
交互界面就是画一个Box、9个格子Button和一个重新开始Button,Button根据board状态来设置,玩家1是‘X’,玩家2是’O’,没有玩家则为空。
void OnGUI(){
GUI.Box(new Rect(10,10,440,350),"井字棋");
if(!gameOver()){
for(int i = 0;i<3;i++){
for(int j = 0;j<3;j++){
if(board[i,j]==0){
if(GUI.Button(new Rect(110+i*80,50+j*80,80,80),"")){
if(curPlayer==1){
board[i,j] = 1;
curPlayer = 2;
}
else{
board[i,j] = 2;
curPlayer = 1;
}
}
}
else if(board[i,j]==1){
GUI.Button(new Rect(110+i*80,50+j*80,80,80),"X");
}
else{
GUI.Button(new Rect(110+i*80,50+j*80,80,80),"O");
}
}
}
}
else{
if(winner==1){
GUI.Box(new Rect(130,50,200,200),"恭喜玩家1获胜!");
}
else if(winner==2){
GUI.Box(new Rect(130,50,200,200),"恭喜玩家2获胜!");
}
else{
GUI.Box(new Rect(130,50,200,200),"平局");
}
}
if(GUI.Button(new Rect(192,320,80,30),"重新开始")){
Init();
}
}
4.结果展示
棋盘界面
游戏进行
胜利画面
代码我也放到gitee中,链接https://api.gitee.com/k_co/3-d-games/blob/master/myChess.cs