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

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

#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 << "\t4X方先行\n";

cout << "\n\n\t\t请按任意键开始下棋!\n\n";

}

int JudgePlay(CGobang & SideX,CGobang & SideO) //每下1步要进行输赢的判断,有结果则返回1

{

if(SideXJudge()) //X方获胜

{

SideXWin();

SideOLose();

return 1;

}

else if(SideOJudge()) //O方获胜

{

SideOWin();

SideXLose();

return 1;

}

else

return 0;

}

void Play(CGobang & SideX,CGobang & SideO) //开始一局游戏

{

while(1)

{

CGobang::PrintBoard(); //输出棋盘

SideXPlayTurn(); //X方下棋

if(JudgePlay(SideX,SideO)) //判断输赢

break;

if(CGobang::GetFull()) //判断是否平局

{

CGobang::Draw();

break;

}

CGobang::PrintBoard(); //输出棋盘

SideOPlayTurn(); //O方下棋

if(JudgePlay(SideX,SideO)) //判断输赢

break;

if(CGobang::GetFull()) //判断是否平局

{

CGobang::Draw();

break;

}

}

}

int main(void)

{

CGobang SideX('X'),SideO('O'); //定义两个棋子类对象,分别代表X方与O方

PrintRule();

cinget();

string strChoice;

do

{

CGobang::InitialBoard(); //初始化棋盘

Play(SideX,SideO); //开始下一局

cout << "是否继续(Y/N)?";

cin >> strChoice;

}while(strChoice == "Y" || strChoice == "y");

SideXPrintInfo();

SideOPrintInfo();

cout << "\n\n\t欢迎再次使用三子连珠游戏!" << endl << endl;

return 0;

}

“井字棋”游戏(又叫“三子棋”),是一款十分经典的益智小游戏,想必很多玩家都有玩过。“井字棋”的棋盘很简单,是一个3×3的格子,很像中国文字中的“井”字,所以得名“井字棋”。“井字棋”游戏的规则与“五子棋”十分类似,“五子棋”的规则是一方首先五子连成一线就胜利;“井字棋”是一方首先三子连成一线就胜利。

井字棋(英文名Tic-Tac-Toe)

井字棋的出现年代估计已不可考,西方人认为这是由古罗马人发明的;但我们中国人认为,既然咱们都发明了围棋、五子棋,那发明个把井字棋自然是不在话下。这些纯粹是口舌之争了,暂且不提。

想起小时候上课喜欢玩井字棋,只要一张草稿纸、一支笔、同桌两人就可以玩了。上体育课,也可以拿着树枝在沙坑里玩。但一直感觉这游戏太简单了,后来接触了五子棋,着迷了一阵,但水平总是很差,便也不玩了。

一字棋游戏极小极大分析法

设有九个空格,由MAX,MIN二人对弈,轮到谁走棋谁就往空格上放一只自己的棋子,谁先使自己的棋子构成“三子成一线”(同一行或列或对角线全是某人的棋子),谁就取得了胜利。

用叉号表示MAX,用圆圈代表MIN。

比如右图中就是MIN取胜的棋局。

为了不致于生成太大的博弈树,假设每次仅扩展两层。估价函数定义如下:

设棋局为P,估价函数为e(P)。

(1) 若P对任何一方来说都不是获胜的位置,则e(P)=e(那些仍为MAX空着的完全的行、列或对角线的总数)-e(那些仍为MIN空着的完全的行、列或对角线的总数)

(2) 若P是MAX必胜的棋局,则e(P)=+∞。

(3) 若P是B必胜的棋局,则e(P)=-∞。

比如P如右图示,则e(P)=6-4=2

要注意利用棋盘位置的对称性,在生成后继节点的位置时,下列博弈结局

都是相同的棋局(在博弈中,一宇棋的分枝系数比较小起初是由于对称性,而后是由于棋盘上未布子的空格减少所致)。图315画出了经过两层搜索生成的博弈树,静态估值记在端节点下面,倒推值记在圆圈内。

由于右图所示位置具有最大的倒推值,它应当选取为MAX的第一步(正好是MAX的最好的优先走步)。

现在我们假设MAX走了这一步,而MIN的回步是直接在X上方的空格里放上一个圆圈(对MAX来说这是一步坏棋,他一定没有采用好的搜索策略)。下一步,MAX又在新的格局下搜索两层,产生如图316所示的搜索图。

现在图中MAX有两个可能“最好的”优先走步,假设MAX走了图上指明的那一步。而MIN为了避免立即败北被迫走了另一步,从而产生如下棋局:MAX再次搜索,产生如图317所示的树。

在这棵树中某些端节点(例如其中一个标记着A)代表MIN获胜,因此它们的估值为—∞。当这些估值被倒推回去时,可看到MAX的最好的也是唯一能使他避免立即失败的一个走步。现在,MIN可以看出MAX必然在他的下一走步中获胜,因此,MIN只好认输。

按极大极小算法编程下一字棋的演示(右图,可以点击 *** 作)...

我们就利用Visual Basic编写一个“井字棋”的小游戏。

设计思路

首先,我们要知道,“井字棋”游戏是一款典型的棋类游戏,游戏时一方式是电脑,另一方是玩家。所以,这类游戏在开始时有两种方式:一种是玩家先走;另一种是电脑先走。这是我们要考虑的第一个问题。

其次,由于与玩家对战的是计算机,所以我们要编写一个过程(Chuqi),它可以使程序模拟人的思维与人下棋(其实就是“人工智能”的体现),这个Chuqi过程也是本游戏软件的关键。此外,我们还要编写两个过程(Lianxian和Shuying),Lianxian过程用来时刻判断棋盘中是否有三个棋子连成一线;Shuying过程用来判断如果有三个棋子连成一线,是哪一方连成一线的,即判断哪一方获胜。

以上几个问题就是该“井字棋”游戏实现的关键思路。

QQ:744192659

邮箱:zhuwentao1996@livecn

很简单用二维字符数组就行了

#include<iostream>

using namespace std;

int main(){

int k=0;

char a[5][5];

for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) a[i][j]=' ';

while(1){

cout<<" 三子棋"<<endl;

cout<<" 1 2 3"<<endl;

cout<<" ----- "<<endl;

cout<<"1|"<<a[1][1]<<" "<<a[1][2]<<" "<<a[1][3]<<"|"<<endl;

cout<<"2|"<<a[2][1]<<" "<<a[2][2]<<" "<<a[2][3]<<"|"<<endl;

cout<<"3|"<<a[3][1]<<" "<<a[3][2]<<" "<<a[3][3]<<"|"<<endl;

cout<<" ----- "<<endl;

for(int j=1;j<=3;j++){

int p=0;

for(int i=1;i<=3;i++){

if(a[i][j]!='X') break;

else p++;

}

if(p==3){

cout<<"二号玩家获胜!!!"<<endl;

return 0;

}

}

for(int j=1;j<=3;j++){

int p=0;

for(int i=1;i<=3;i++){

if(a[j][i]!='X') break;

else p++;

}

if(p==3){

cout<<"二号玩家获胜!!!"<<endl;

return 0;

}

}

if(k==9) break;

k++;

int x1,y1,x2,y2;

cout<<"一号玩家(O)请输入(n行m列):";

cin>>x1>>y1;

while(1){

if(a[x1][y1]==' ') break;

else{

cout<<"这个位置已占用,请重新输入!!!"<<endl;

cin>>x1>>y1;

}

}

a[x1][y1]='O';

system("cls");

cout<<" 三子棋"<<endl;

cout<<" 1 2 3"<<endl;

cout<<" ----- "<<endl;

cout<<"1|"<<a[1][1]<<" "<<a[1][2]<<" "<<a[1][3]<<"|"<<endl;

cout<<"2|"<<a[2][1]<<" "<<a[2][2]<<" "<<a[2][3]<<"|"<<endl;

cout<<"3|"<<a[3][1]<<" "<<a[3][2]<<" "<<a[3][3]<<"|"<<endl;

cout<<" ----- "<<endl;

for(int j=1;j<=3;j++){

int p=0;

for(int i=1;i<=3;i++){

if(a[i][j]!='O') break;

else p++;

}

if(p==3){

cout<<"一号玩家获胜!!!"<<endl;

return 0;

}

}

for(int j=1;j<=3;j++){

int p=0;

for(int i=1;i<=3;i++){

if(a[j][i]!='O') break;

else p++;

}

if(p==3){

cout<<"一号玩家获胜!!!"<<endl;

return 0;

}

}

if(k==9) break;

k++;

cout<<"二号玩家(X)请输入(n行m列):";

cin>>x2>>y2;

while(1){

if(a[x2][y2]==' ') break;

else{

cout<<"这个位置已占用,请重新输入!!!"<<endl;

cin>>x2>>y2;

}

}

a[x2][y2]='X';

system("cls");

}

cout<<"------平局------"<<endl;

return 0;

}

三子棋怎么赢

先下者才能赢。先下中间,在下一个角(这个叫的对角没有对方的子)然后步步紧逼,才能胜利。

三子棋怎么玩

三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。

先手:正中间,对面如果走边中间位置,就落子在紧贴对方棋子的角位置。对方必定堵你,然后你就落子在刚才自己角位置棋子的旁边(边中间位置),必赢。

如果对方也会玩,就会先落子在角位置,基本最后就是和棋。

后手:对方中间,你就角位置,然后堵对方就行。只要对方不傻,就是和棋。

方格纸三子棋怎么样

虽然画面简单,玩法简单,但是我就是很喜欢的说,很像上学的时候在作业本上画出的风格,那时总是偷偷的把本子传来传去和同学一起玩,好怀念~~(占领中间位置才是王道啊)

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

lude<stdioh>#include<stdlibh>#include<timeh> char arr[3][3] = { 0 }; 直接定义外部变数所有的函式可以直接使用 因为考虑到棋盘大小是固定的int size = 9; 棋盘大小固定 每下一个子都会使可以下子的容量-1void ches oard() 列印棋盘{ 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 puter() 电脑下棋{ printf("puter(#):/n"); int m = 0, n = 0; srand(time(NULL)); 电脑的座标是随机产生的 以时间为种子 m = rand() % 3; 对3取余产生0-2的随机数赋给阵列下标 n = rand() % 3; while (arr[m][n] != ' ') 如果产生的

用flash cs4制作三子棋程式码怎么写

同学哪个学校的 求共享

五子棋白棋怎么赢

这个游戏白黑不都一样吗,要看自己的技术的,如果你技术不好,黑白不都一样

五子棋怎么赢

五子棋提升棋力除了看棋谱,多下棋,再没什么好方法了。如果硬要说一条,那就是多思考,提高自己的计算能力!

要是你经常在网上下棋,那就用 ORC 。那是真正能提升能力的地方。ORC里高手云集,定期比赛,最重要的事它有“反软体”功能,开着“黑石”是不可能在ORC下棋的!

我建议你买一本比较基础的五子棋书(这个书店有卖),再买一副好棋盘,照著书在盘上下棋,多揣摩揣摩作者的话,体会 做棋 的技巧,时间长了棋力就会有个质的飞跃。(棋谱要看,棋要多下,可是一定要有效,不要做无用功哦!) 要是你嫌这样麻烦,也可以下载“黑石”软体,登入 rifchina (中国连珠网),上面内容很多的。

另外,如果你想成为五子棋高手,不知道基础的定式是不行的,你可以通过定式掌握很多有效的攻防技巧。各个开局的基本定式应做到心中有数,但是实战中 计算能力 会发挥主要作用。总之“计算为主,定式为辅”。

最后,下棋很考验人的耐性,五子棋虽然规则简单,但下棋能力的提升不是在短时间内能够完成的,这需要经验,等你练到一定程度,有了“棋感”的时候,在联众有规则的房间里,就可以鹤立鸡群了!

五子棋怎么算赢?

五子连成一线,横、竖、斜线都可以

谁有java 的三子棋 要用按钮元件

extends jpont 很好做

怎么用eclipse的虚拟机器执行三子棋的程式

在eclipse上执行,在eclipse执行android程式,虚拟机器无反应,是后台执行出错导致。正确的执行虚拟机器的方法:

① 手机设定:设定->开发人员选项->勾选“USB除错”。

②安装驱动:将手机和电脑用资料线连线好之后,windows系统中如果安装“360手机助手”或者“豌豆荚”的话,会自动为手机安装驱动,确认安装,并重启电脑。

③开启命令列可以确认是否安装好驱动

如下图所示:

如图所示已经成功安装驱动。

④在eclipse中进行配置

选单栏Run ->Run Configurations

选择Target选项卡,勾选“Always prompt to pick device”,选择右下角的Apply -> Close

⑤执行程式:选择专案->右击 ->Run As -> Applications

然后d出一下视窗:

点选OK就可以执行程式了

控制台里显示资讯:

[2016-04-15 13:41:45 - Demo2] ------------------------------[2016-04-15 13:41:45 - Demo2] Android Launch![2016-04-15 13:41:45 - Demo2] adb is running normally[2016-04-15 13:41:45 - Demo2] Performing hsdemo2MainUI activity launch[2016-04-15 13:41:48 - Demo2] Uploading Demo2apk onto device '087A4C38391F'[2016-04-15 13:41:48 - Demo2] Installing Demo2apk[2016-04-15 13:41:51 - Demo2] Suess![2016-04-15 13:41:51 - Demo2] Starting activity hsdemo2MainUI on device 087A4C38391F[2016-09-15 13:41:52 - Demo2] ActivityManager: Starting: Intent { act=androidintentactionMAIN cat=[androidintentcategoryLAUNCHER] cmp=hsdemo2/MainUI }说明执行程式成功。

以上就是关于用C语言设计一个“三子棋”的游戏,要求用上下左右光标控制。要程序源代码!全部的内容,包括:用C语言设计一个“三子棋”的游戏,要求用上下左右光标控制。要程序源代码!、高分求算法:关于井字棋(三子棋)的算法!!面谈感谢!!!!、三子棋c++代码!!急!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9450621.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存