3D游戏编程第二次作业

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值