当前位置:首页 > 代码 > 正文

井字棋c源代码(井字棋代码java逻辑)

admin 发布:2022-12-19 19:13 123


今天给各位分享井字棋c源代码的知识,其中也会对井字棋代码java逻辑进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

C++ 井字棋

好了 所有要求都有了

#include iostream

#include string

using namespace std;

const int MAX_MOVES=9;

void printBoard(char board[3][3]);

void getNextMove(char board[3][3]);

void win(char board[3][3]);

void whowin(char key);

int foot = 0;

int main()

{

int i;

int n = 0;

char board[3][3]={ '7','8','9', '4','5','6', '1','2','3' };

printBoard(board);

for(i=0;iMAX_MOVES;i++)

{

getNextMove(board);

win(board);

n++;

}

if(n=MAX_MOVES)

cout"gameover";

system("PAUSE");

return 0;

}

void win(char a[3][3])

{

int i, j, k;

char key;

if((a[0][0] == a[1][1] a[1][1] == a[2][2] a[2][2] == a[0][0]) || (a[2][0] == a[1][1] a[1][1] == a[0][2] a[2][0] == a[0][2]))

{

key = a[0][0];

whowin(key);

}

else

{

for(i = 0; i 3; i++)

for(j = 0; j 3; j++)

if(a[i][j] == 15 || a[i][j] == 'X')

{

key = a[i][j];

for(k = 0; k 3; k++)

{

if(a[i][k] != key)

break;

}

if(k == 3)

whowin(key);

for(k = 0; k 3; k++)

{

if(a[k][j] != key)

break;

}

if(k == 3)

whowin(key);

}

}

}

void whowin(char key)

{

if(key == 15)

cout "P1 Win!" endl;

else

cout "P2 Win!" endl;

exit(0);

}

void printBoard(char board[3][3])

{

coutboard[0][0]" | "board[0][1]" | "board[0][2]endl;

cout"--+---+--"endl;

coutboard[1][0]" | "board[1][1]" | "board[1][2]endl;

cout"--+---+--"endl;

coutboard[2][0]" | "board[2][1]" | "board[2][2]endl;

}

void getNextMove(char board[3][3])

{

int i,j,s,t;

char m;

while(1)

{

s = -1;

t = -1;

cout"Make your move: ";

cinm;

for(i=0;i3;i++)

for(j=0;j3;j++)

if(board[i][j]==m)

{

s=i;

t=j;

}

if(s == -1 t == -1)

cout "that point already has a pawn!" endl;

else

break;

}

if(foot % 2 == 0)

board[s][t] = 15;

else

board[s][t] = 'X';

foot++;

system("cls");

printBoard(board);

}

C语言编写井字棋游戏 代码已有半成品

你初始化一个字符数组,里面都给他一样的初始值 E

X 下了就改成X ,O 下了就改成 O,下完以后判断横竖斜三条线有没有一样的,

一共就九个格子,下一步就少一步 ,下之前判断一下,如果等于E ,就是空的,可以放子。

下完一步总步数减一,你这样不就能确定还有几步可以走了。

九步都下完如果没有横竖斜都一样的不就是平局吗,所有数组元素的值都不等于E了不就结束了,或者九步完了也结束了

另外,少用GOTO ,变量定义最好有意义,写点注释

用c语言写井字棋游戏 求教一个问题

用char数组存棋盘,并记录当前是玩家1还是玩家2。

如果用户输入0,首先判断当前玩家是1还是2。如果是1,就board[0] = 'O';否则board[0] = 'X'。

伪代码就类似于:

char board[10] = "         "; //初始为9个空格,并且多留一个位置放'\0'

int player = 1; //从玩家1开始,取值为1或2

int position; //玩家在哪个格子放O或X。取值为0~8

while(true) {

    scanf("%d", position); //获取玩家输入

    if (player == 1) { //对于玩家1,应该往棋盘上放O,下一次就轮到玩家2

        board[position] = 'O';

        player = 2;

    } else { //对于玩家2,应该往棋盘上放X,下一次就轮到玩家1

        board[position] = 'X';

        player = 1;

    }

    print(board); //输出棋盘(需要另外实现)

    if (gameOver(board)) { //检查输赢(需要另外实现)

        //输出谁赢了并退出

        break;

    }

}

用C写一个井字棋程序,但第(1,1)格总是显示5,代码如下,望解答

#includestdio.h

#includectype.h

#includeconio.h

int n=9, z=0, qp[10]={0};

int chkwin(int t[], int w)

{if (t[1]==w t[1]==t[2] t[2]==t[3]) return(w);

if (t[4]==w t[4]==t[5] t[5]==t[6]) return(w);

if (t[7]==w t[7]==t[8] t[8]==t[9]) return(w);

if (t[1]==w t[1]==t[4] t[4]==t[7]) return(w);

if (t[2]==w t[2]==t[5] t[5]==t[8]) return(w);

if (t[3]==w t[3]==t[6] t[6]==t[9]) return(w);

if (t[1]==w t[1]==t[5] t[5]==t[9]) return(w);

if (t[3]==w t[3]==t[5] t[5]==t[7]) return(w);

return(0);

}

long search(int n, int k, int t[])

{int i, h, f, g;

long j;

if (n==0) return(chkwin(t,k));

for (f=0, j=0,i=1; i10; i++)

if (t[i]==0)

{t[i]=k; h=chkwin(t,k);

if (h==k) f++;

else j+=search(n-1,k*-1,t);

t[i]=0;

}

if (fz) for (j=k, g=n; g0; j*=g--);

return(j);

}

/* 电脑选位置走棋,择位原则1.当前位置必须为空 */

/* 2.若走当前位置电脑能赢,则走这一步,否则转(3) */

/* 3.若当前位置被人走电脑会输,则走这一步,否则转(4) */

/* 4.试走当前位置并调用 search()函数,求走当前位置电脑的有利程度 */

/* 5.找对电脑有利程度最大的位置走 */

void cgo()

{int i, ti=0;

long j=-8000000, t=0;

for (ti=1; ti-2; ti-=2) /*ti=1,先看自己能否赢;ti=-1,看对受能否赢*/

for (i=1; i10; i++)

if (qp[i]==0)

{qp[i]=ti;

if (chkwin(qp, ti)!=0) {n--; qp[i]=1; return;}

qp[i]=0;

}

for (i=1; i10;i++)

if (qp[i]==0)

{qp[i]=1; t=search(n-1,-1,qp);

if (tj) {j=t; ti=i;}

qp[i]=0;

}

n--; qp[ti]=1;

}

/* 函数mgo(),人输入走棋位置 */

void mgo()

{int c=0;

printf ("\nPlease enter the Num to go: ");

for (c=getche(); ; printf("\n"), c=getche() )

if (isdigit(c) c!='0' qp[c-48]==0)

{n--; qp[c-48]=-1; return;

} }

/* 屏幕输出函数display,在屏幕上输出当前的棋盘 */

void display(int x)

{int i;

char t[10]={0};

for (i=1; i10; i++)

{if (qp[i]0) t[i]=88;

if (qp[i]0) t[i]=79;

}

printf ("\n%c|%c|%c\n-----\n%c|%c", t[1], t[2], t[3], t[4], t[5]);

printf ("|%c\n-----\n%c|%c|%c\n", t[6], t[7], t[8], t[9]);

if (x==0) printf("\ndraw! \n");

if (x==1) printf("\ncomputer win!\n");

if (x==2) printf("\ncontinue \n");

}

main()

{char c;

printf ("\nGo first? [Y/N]:"); /*选择谁先走*/

for (c=getche(); c!='Y'c!='y'c!='N'c!='n'; c=getche());

if (c=='N'||c=='n') {cgo(); z=1; display(2);}

while (1)

{mgo(); if (!n) {display(0); break;} /*人走,若不是最后一步,继续;否则跳出*/

cgo(); if (chkwin(qp,1)) {display(1); break;} /*电脑走,若没赢,继续;否则跳出*/

if (n) display(2); /*还没走到最后一步,继续;否则跳出*/

else {display(0); break;}

}

getchar();

return 0;

}

C语言 怎么编程井字棋

简单来说,定义数据结构(比如棋盘数组,棋盘格子以及棋子,双方玩家等相关的数据结构表示),定义规则(比如同一个位置不能放两颗棋子,三颗棋子连线放胜利)。

具体取决于需求,比如图形表示和AI(人工智能)等等。如果你只是想要简单的用命令行和文字输出表示,那么编写一个控制台应用程序就可以。如果需要图形等控制,需要借助一些图形以及UI库等。但是这些外部表示可以跟核心数据结构和规则,算法等分离开来。所以刚开始先用文字表示写出核心代码,后续可以逐渐加上UI图形,AI等。

求井字棋的源代码

CtictactoeView::CtictactoeView()//程序中关键变量赋初值

{

// TODO: 在此处添加构造代码

int i , j;

for( i = 0 ; i 3 ; i++ )

for( j = 0 ; j 3 ; j++ )

myGraph[i][j] = 0;

currX = -1;

currY = -1;

whosTurn = 1;

whosFirst = 1;

}

void CtictactoeView::OnDraw(CDC* pDC)//程序界面、游戏状态的显示

{

CtictactoeDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

if (!pDoc)

return;

// TODO: 在此处为本机数据添加绘制代码

CBitmap bitmap[9];

CBitmap *pOldBitmap;

CDC MemDC;

int i , j;

int myTop = 5;

int myLeft;

int mySize = 100;

MemDC.CreateCompatibleDC( pDC );

for( i = 0 ; i 3 ; i++ )

{

myTop = 5 + 105 * i;

myLeft = 5;

for( j = 0 ; j 3 ; j++ )

{

myLeft = 5 + 105 * j;

if( myGraph[i][j] == 0 )

{

bitmap[ 3 * i + j ].LoadBitmap( IDB_BACKGROUND );

}

else if( myGraph[i][j] == 1 )

{

bitmap[ 3 * i + j ].LoadBitmap( IDB_CROSS );

}

else if( myGraph[i][j] == 2 )

{

bitmap[ 3 * i + j ].LoadBitmap( IDB_ROUND );

}

else

{

bitmap[3 * i + j ].LoadBitmap( IDB_CHOOSE );

}

pOldBitmap = MemDC.SelectObject( bitmap[ 3 * i + j ] );

pDC-BitBlt( myLeft , myTop , mySize , mySize , MemDC , 0 , 0 , SRCCOPY );

MemDC.SelectObject( pOldBitmap );

}

}

}

void CtictactoeView::OnMouseMove(UINT nFlags, CPoint point)//跟踪鼠标位置

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

this-point = point;

int x , y;

x = -1;

y = -1;

if( point.x = 5 point.x = 105 )

x = 0;

else if( point.x = 110 point.x = 210 )

x = 1;

else if( point.x = 215 point.x = 315 )

x = 2;

if( point.y = 5 point.y = 105 )

y = 0;

else if( point.y = 110 point.y = 210 )

y = 1;

else if( point.y = 215 point.y = 315 )

y = 2;

CRect mRect;

if( currX == x currY == y )

return;

if( currX != -1 currY != -1 myGraph[currY][currX] == 3 )

{

myGraph[currY][currX] = 0;

mRect = CRect( 5 + currX * 105 , 5 + currY * 105 , 105 + currX * 105 , 105 + currY * 105 );

InvalidateRect( mRect );

currX = -1;

currY = -1;

}

if( x != -1 y != -1 myGraph[y][x] == 0 )

{

currX = x;

currY = y;

myGraph[y][x] = 3;

mRect = CRect( 5 + x * 105 , 5 + y * 105 , 105 + x * 105 , 105 + y * 105 );

InvalidateRect( mRect );

}

CView::OnMouseMove(nFlags, point);

}

void CtictactoeView::OnMouseX( CCmdUI *pCmdUI )//在状态栏中显示鼠标位置

{

CString cs;

cs.Format( "X=%d", point.x );

pCmdUI-SetText( cs );

}

void CtictactoeView::OnMouseY( CCmdUI *pCmdUI ) //在状态栏中显示鼠标位置

{

CString cs;

cs.Format( "Y=%d", point.y );

pCmdUI-SetText( cs );

}

void CtictactoeView::OnWhosFirst( CCmdUI *pCmdUI )//在状态栏中显示电脑先走还是人先走

{

if( whosFirst == 2 )

pCmdUI-SetText( "电脑先" );

else

pCmdUI-SetText( "用户先" );

}

void CtictactoeView::OnLButtonDown(UINT nFlags, CPoint point)//人走棋的输入部分

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

if( currX == -1 || currY == -1 )

{

}

else

{

myGraph[currY][currX] = whosTurn;

CRect mRect;

mRect = CRect( 5 + currX * 105 , 5 + currY * 105 , 105 + currX * 105 , 105 + currY * 105 );

InvalidateRect( mRect );

if( whosTurn == 1 )

whosTurn = 2;

else

whosTurn = 1;

currX = -1;

currY = -1;

int ret = judgment();

if( ret == 0 )

computerPlay();

else

winner( ret );

}

CView::OnLButtonDown(nFlags, point);

}

void CtictactoeView::computerPlay(void) //电脑走棋的人工智能部分

{

long score[3][3];

long maxScore;

int x,y;

int i,j,k;

int me = 2;

int another = 1;

for( i = 0 ; i 3 ; i++ )

for( j = 0 ; j 3 ; j++ )

{

score[i][j] = 0;

if( myGraph[i][j] != 0 )

continue;

if( ( i + j ) % 2 == 0 )

score[i][j] += 10;

else

score[i][j] += 1;

if( i == 1 j == 1 )

score[i][j] += 90;

for( k = 0 ; k 3 ; k++ )

if( k != j )

{

if( myGraph[i][k] == me )

{

if( myGraph[i][3-j-k] == me )

score[i][j] += 100000;

else if( myGraph[i][3-j-k] == 0 )

score[i][j] += 1000;

break;

}

else if( myGraph[i][k] == another )

{

if( myGraph[i][3-j-k] == another )

score[i][j] += 10000;

else if( myGraph[i][3-j-k] == 0 )

score[i][j] += 750;

break;

}

}

for( k = 0 ; k 3 ; k++ )

if( k != i )

{

if( myGraph[k][j] == me )

{

if( myGraph[3-i-k][j] == me )

score[i][j] += 1000000;

else if( myGraph[3-i-k][j] == 0 )

score[i][j] += 1000;

break;

}

else if( myGraph[k][j] == another )

{

if( myGraph[3-i-k][j] == another )

score[i][j] += 10000;

else if( myGraph[3-i-k][j] == 0 )

score[i][j] += 750;

break;

}

}

if( i == j )

{

for( k = 0 ; k 3 ; k++ )

if( k != i )

{

if( myGraph[k][k] == me )

{

if( myGraph[3-i-k][3-i-k] == me )

score[i][j] += 1000000;

else if( myGraph[3-i-k][3-i-k] == 0 )

score[i][j] += 1000;

break;

}

else if( myGraph[k][k] == another )

{

if( myGraph[3-i-k][3-i-k] == another )

score[i][j] += 10000;

else if( myGraph[3-i-k][3-i-k] == 0 )

score[i][j] += 750;

break;

}

}

}

if( ( i + j ) == 2 )

{

for( k = 0 ; k 3 ; k++ )

if( k != i 2 - k != j )

{

if( myGraph[k][2-k] == me )

{

if( myGraph[3-i-k][i+k-1] == me )

score[i][j] += 1000000;

else if( myGraph[3-i-k][i+k-1] == 0 )

score[i][j] += 1000;

break;

}

else if( myGraph[k][2-k] == another )

{

if( myGraph[3-i-k][i+k-1] == another )

score[i][j] += 10000;

else if( myGraph[3-i-k][i+k-1] == 0 )

score[i][j] += 750;

break;

}

}

}

}

maxScore = 0;

for( i = 0 ; i 3 ; i++ )

for( j = 0 ; j 3 ; j++ )

if( score[i][j] maxScore )

{

maxScore = score[i][j];

x = i;

y = j;

}

CRect mRect;

mRect = CRect( 5 + y * 105 , 5 + x * 105 , 105 + y * 105 , 105 + x * 105 );

InvalidateRect( mRect );

myGraph[x][y] = whosTurn;

if( whosTurn == 1 )

whosTurn = 2;

else

whosTurn = 1;

int ret = judgment();

if( ret != 0 )

winner( ret );

}

int CtictactoeView::judgment()//判断是否已经结束游戏,判决谁赢得比赛

{

int who;

int i,j;

bool flag;

for( who = 1 ; who = 2 ; who++ )

{

//检查玩家who在行上是否成胜状态

for( i = 0 ; i 3 ; i++ )

{

flag = true;

for( j = 0 ; j 3 flag ;j++ )

if( myGraph[i][j] != who )

flag = false;

//如果有成胜状态,就可以返回了

if( flag )

return who;

}

for( j = 0 ; j 3 ; j++ )

{

flag = true;

for( i = 0 ; i 3 flag ; i++ )

if( myGraph[i][j] != who )

flag = false;

if( flag )

return who;

}

//检查斜列1有无成胜状态

flag = true;

for( i = 0 ; i 3 flag ; i++ )

if( myGraph[i][i] != who )

flag = false;

if( flag )

return who;

//检查斜列2有无成胜状态

flag = true;

for( i = 0 ; i 3 flag ; i++ )

if( myGraph[i][3-i-1] != who )

flag = false;

if( flag )

return who;

}

flag = true;

for( i = 0 ; i 3 flag ; i++ )

for( j = 0 ; j 3 flag ; j++ )

if( myGraph[i][j] == 0 )

flag = false;

if( flag )

return 3;

else

return 0;

return 0;

}

void CtictactoeView::winner( int who )//显示谁赢得比赛

{

switch( who )

{

case 1:

::AfxMessageBox( "祝贺你胜利啦!" );

break;

case 2:

::AfxMessageBox( "电脑胜利,你要加油噢!" );

break;

case 3:

::AfxMessageBox( "平局!" );

}

initGame();

}

void CtictactoeView::initGame(void)//一局游戏的初始化

{

int i , j;

for( i = 0 ; i 3 ; i++ )

for( j = 0 ; j 3 ; j++ )

myGraph[i][j] = 0;

currX = -1;

currY = -1;

CRect mRect;

mRect = CRect( 5 , 5 , 315 , 315 );

InvalidateRect( mRect );

if( whosFirst == 1 )

{

whosFirst = 2;

whosTurn = 2;

computerPlay();

}

else

{

whosFirst = 1;

whosTurn = 1;

}

}

void CtictactoeView::OnNewgame()//开始新的游戏

{

// TODO: 在此添加命令处理程序代码

initGame();

}

本文来自CSDN博客,转载请标明出处:

关于井字棋c源代码和井字棋代码java逻辑的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/19728.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载