当前位置:首页 » 编程语言 » 三子棋c语言

三子棋c语言

发布时间: 2022-12-17 22:40:28

① 用C语言设计一个“三子棋”的游戏,要求用上下左右光标控制。要程序源代码!

#include <iostream>
#include <string>
using namespace std;
class CGobang //棋子类
{
private:
char chSort; //棋子的类别
int nWin; //赢棋的次数
int nLose; //输棋的次数
static int nDraw; //平局次数
static char achBoard[3][3]; //棋盘
static int nSize; //棋盘的尺寸 nSize X nSize
public:
CGobang(char chsort) //构造函数,决定一方棋子的类别
{
chSort=chsort;
nWin=nLose=nDraw=0;
}
void PlayTurn(void); //走1步棋
int Judge(); //判断是否连成一线,是则返回1,否则返回0
void Win(void); //赢棋
void Lose(void); //输棋
static void Draw(void); //平局
void PrintInfo(void); //输出总体情况
static void PrintBoard(void); //输出棋盘
static int GetFull(void); //判断棋盘是否已布满棋子
static void InitialBoard(void); //初始化棋盘

};
char CGobang::achBoard[3][3];
int CGobang::nSize = 3;
int CGobang::nDraw = 0;
void CGobang::Draw()
{
cout << "\n\n\t\t平局!\n\n";
nDraw++;
}

void CGobang::InitialBoard() //初始化棋盘
{
for(int i=0;i<nSize;i++)
for(int j=0;j<nSize;j++)
achBoard[i][j]=' ';
}
void CGobang::PrintBoard() //输出棋盘
{
cout << endl;
cout << " 1 2 3 " << endl;
cout << "1 " << achBoard[0][0] << " | " << achBoard[0][1] << " | " << achBoard[0][2] << endl;
cout << " ---|---|---" << endl;
cout << "2 " << achBoard[1][0] << " | " << achBoard[1][1] << " | " << achBoard[1][2] << endl;
cout << " ---|---|---" << endl;
cout << "3 " << achBoard[2][0] << " | " << achBoard[2][1] << " | " << achBoard[2][2] << endl;
cout << endl;
cout << endl;
}
int CGobang::GetFull() //判断棋盘是否布满棋子,若是返回1
{
for(int i=0;i<nSize;i++)
for(int j=0;j<nSize;j++)
if(achBoard[i][j]!=' ')
return 0;

return 1;
}
void CGobang::Win() //赢棋
{
cout << "\n\n\t\t"<<chSort<<"方获胜!\n\n";
nWin++;
}
void CGobang::Lose() //输棋
{
nLose++;
}
void CGobang::PlayTurn(void) //走1步棋
{
int nRow,nCol;
cout <<"现在该 "<<chSort<<" 方下棋,请输入棋盘坐标(x,y):";
do
{
cin >> nRow >> nCol; //输入坐标
if(nRow>nSize || nCol>nSize) //判断坐标越界
cout <<"输入的坐标越界,x与y的范围应小于等于"<<nSize<<",请重新输入\n";
else if(achBoard[nRow-1][nCol-1]!=' ') //判断坐标合理
cout <<"棋盘("<<nRow <<" ,"<<nCol <<")处已有棋子,请重新输入\n";
else
{
achBoard[nRow-1][nCol-1]=chSort; //在坐标处放上棋子
break; //退出循环
}
}while(1);
}
int CGobang::Judge() //判断是否棋子连成一线,若是返回1
{//以下是各种可能连成一线的情况
if(achBoard[0][0]==chSort && achBoard[1][1]==chSort && achBoard[2][2]==chSort)
return 1;
else if(achBoard[2][0]==chSort && achBoard[1][1]==chSort && achBoard[0][2]==chSort)
return 1;
else if(achBoard[0][0]==chSort && achBoard[1][0]==chSort && achBoard[2][0]==chSort)
return 1;
else if(achBoard[0][1]==chSort && achBoard[1][1]==chSort && achBoard[2][1]==chSort)
return 1;
else if(achBoard[0][2]==chSort && achBoard[1][2]==chSort && achBoard[2][2]==chSort)
return 1;
else if(achBoard[0][0]==chSort && achBoard[0][1]==chSort && achBoard[0][2]==chSort)
return 1;
else if(achBoard[1][0]==chSort && achBoard[1][1]==chSort && achBoard[1][2]==chSort)
return 1;
else if(achBoard[2][0]==chSort && achBoard[2][1]==chSort && achBoard[2][2]==chSort)
return 1;
else
return 0; //没有连成一线则返回0
}
void CGobang::PrintInfo(void) //打印总体情况
{
cout <<"Side "<<chSort<<"方共计赢 "<<nWin<<" 局,输 "<<nLose<<" 局,平 "<<nDraw<<" 局。"<<endl;
}
void PrintRule(void) //打印规则
{
cout << "\t\t欢迎使用三子连珠游戏!" << endl << endl;
cout << "\t游戏规则:" << endl;
cout << "\t1.每1步输入要下棋的格子的x,y坐标,按Enter键\n";
cout << "\t2.有1方首先3个棋子连成一线即判获胜\n";
cout << "\t3.当棋子布满棋盘但仍无获胜方即为平局\n";
cout << "\t4.X方先行\n";
cout << "\n\n\t\t请按任意键开始下棋!\n\n";
}
int JudgePlay(CGobang & SideX,CGobang & SideO) //每下1步要进行输赢的判断,有结果则返回1
{
if(SideX.Judge()) //X方获胜
{
SideX.Win();
SideO.Lose();
return 1;
}
else if(SideO.Judge()) //O方获胜
{
SideO.Win();
SideX.Lose();
return 1;
}
else
return 0;
}
void Play(CGobang & SideX,CGobang & SideO) //开始一局游戏
{
while(1)
{
CGobang::PrintBoard(); //输出棋盘
SideX.PlayTurn(); //X方下棋
if(JudgePlay(SideX,SideO)) //判断输赢
break;
if(CGobang::GetFull()) //判断是否平局
{
CGobang::Draw();
break;
}
CGobang::PrintBoard(); //输出棋盘
SideO.PlayTurn(); //O方下棋
if(JudgePlay(SideX,SideO)) //判断输赢
break;
if(CGobang::GetFull()) //判断是否平局
{
CGobang::Draw();
break;
}
}
}

int main(void)
{
CGobang SideX('X'),SideO('O'); //定义两个棋子类对象,分别代表X方与O方
PrintRule();
cin.get();
string strChoice;
do
{
CGobang::InitialBoard(); //初始化棋盘
Play(SideX,SideO); //开始下一局
cout << "是否继续(Y/N)?";
cin >> strChoice;
}while(strChoice == "Y" || strChoice == "y");

SideX.PrintInfo();
SideO.PrintInfo();
cout << "\n\n\t欢迎再次使用三子连珠游戏!" << endl << endl;
return 0;
}

② 《java程序设计》实训——网络三子棋游戏开发

你要问什么,发广告。

③ 怎么用python写三子棋并显示空位

lude<stdio.h>#include<stdlib.h>#include<time.h> char arr[3][3] = { 0 }; //直接定义外部变量所有的函数可以直接使用 因为考虑到棋盘大小是固定的int size = 9; //棋盘大小固定 每下一个子都会使可以下子的容量-1void chessboard() //打印棋盘{ int i = 0, j = 0; printf(" | | /n"); for (i = 0; i < 3; i++) { printf("_%c_|_%c_|_%c_/n", arr[i][0], arr[i][1], arr[i][2]); //棋盘对应位置下棋 if (i < 2) printf(" | | /n"); }}void player() //玩家下棋{ int m = 0, n = 0; printf("player(@):"); //输入的是对应的坐标 scanf_s("%d%d", &m, &n); //玩家输入的坐标必须在范围内并且不能是被下过的地方 if (m<1 || m>3 || n<1 || n>3 || arr[m - 1][n - 1] != ' ') { printf("this place can not play!/n"); //如果不符合要求则继续调用这个函数 player(); } else { arr[m - 1][n - 1] = '@'; //将棋子放入相应的内容 棋盘容量-1 size--; }}void computer() //电脑下棋{ printf("computer(#):/n"); int m = 0, n = 0; srand(time(NULL)); //电脑的坐标是随机产生的 以时间为种子 m = rand() % 3; //对3取余产生0-2的随机数赋给数组下标 n = rand() % 3; while (arr[m][n] != ' ') //如果产生的

热点内容
鹦鹉linux 发布:2025-01-25 03:44:02 浏览:196
python如何抛出异常 发布:2025-01-25 03:40:27 浏览:984
更新成本算法 发布:2025-01-25 03:38:09 浏览:115
我的世界在服务器里面用toolbox 发布:2025-01-25 03:38:09 浏览:566
学编程不想学了 发布:2025-01-25 03:36:51 浏览:379
如何压缩0 发布:2025-01-25 03:36:49 浏览:794
服务器主板和家用电脑主板的区别 发布:2025-01-25 03:36:47 浏览:893
查询数据库连接数 发布:2025-01-25 03:36:41 浏览:976
安卓锁屏切换在哪里 发布:2025-01-25 03:30:56 浏览:220
aspx代码加密 发布:2025-01-25 03:28:09 浏览:925