當前位置:首頁 » 編程軟體 » c井字棋編程

c井字棋編程

發布時間: 2022-09-07 13:19:26

c語言 怎麼編程井字棋

簡單來說,定義數據結構(比如棋盤數組,棋盤格子以及棋子,雙方玩家等相關的數據結構表示),定義規則(比如同一個位置不能放兩顆棋子,三顆棋子連線放勝利)。

具體取決於需求,比如圖形表示和AI(人工智慧)等等。如果你只是想要簡單的用命令行和文字輸出表示,那麼編寫一個控制台應用程序就可以。如果需要圖形等控制,需要藉助一些圖形以及UI庫等。但是這些外部表示可以跟核心數據結構和規則,演算法等分離開來。所以剛開始先用文字表示寫出核心代碼,後續可以逐漸加上UI圖形,AI等。

㈡ 井字棋c程序

這個程序 有問題~
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);
}

㈢ 用c語言寫井字棋游戲 求教一個問題

用char數組存棋盤,並記錄當前是玩家1還是玩家2。

如果用戶輸入0,首先判斷當前玩家是1還是2。如果是1,就board[0] = 'O';否則board[0] = 'X'。

偽代碼就類似於:

charboard[10]="";//初始為9個空格,並且多留一個位置放''
intplayer=1;//從玩家1開始,取值為1或2
intposition;//玩家在哪個格子放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語言編寫井字棋游戲 代碼已有半成品

你初始化一個字元數組,裡面都給他一樣的初始值 E
X 下了就改成X ,O 下了就改成 O,下完以後判斷橫豎斜三條線有沒有一樣的,

一共就九個格子,下一步就少一步 ,下之前判斷一下,如果等於E ,就是空的,可以放子。
下完一步總步數減一,你這樣不就能確定還有幾步可以走了。
九步都下完如果沒有橫豎斜都一樣的不就是平局嗎,所有數組元素的值都不等於E了不就結束了,或者九步完了也結束了

另外,少用GOTO ,變數定義最好有意義,寫點注釋

㈤ c語言井字棋雙人對戰

3x3的棋盤輸入0~8的數字來確定落子位置,簡單的程序啊 scanf("%d",&choice); 以下一句3的整倍數確定玩家落棋的行數 row = --choice / 3; 確定行數還不行,必須確定列數,所以除3的余數就是列數 column = choice % 3;

㈥ 用C寫一個井字棋程序,但第(1,1)格總是顯示5,代碼如下,望解答

#include<stdio.h>
#include<ctype.h>
#include<conio.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; i<10; 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 (f>z) for (j=k, g=n; g>0; 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; i<10; i++)
if (qp[i]==0)
{qp[i]=ti;
if (chkwin(qp, ti)!=0) {n--; qp[i]=1; return;}
qp[i]=0;
}
for (i=1; i<10;i++)
if (qp[i]==0)
{qp[i]=1; t=search(n-1,-1,qp);
if (t>j) {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; i<10; 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++ 井字棋 (注釋) 一定要給注釋!!!

#include <stdio.h>
#include <stdlib.h>

#define SIZE 3
typedef enum {CBLANK, CBLACK, CWHITE} CHESS;
typedef enum {GM_WIN, GM_LOST, GM_UNKNOW, GM_ERROR} GAMEFLAG;

void init_board(CHESS board[SIZE][SIZE]) //初始化
{
int i, j;
for (i = 0; i < SIZE; i++)
{
for (j = 0; j < SIZE; j++)
{
board[i][j] = CBLANK;
}
}
}

void print_chess(CHESS board[SIZE][SIZE]) //列印棋盤
{
int i, j;

putchar(' ');
for (i=0; i < SIZE; i++)
{
printf("%2d", i+1);
}
putchar('\n');

for (i=0; i < SIZE; i++)
{
printf("%-2d", i+1);
for (j=0; j < SIZE; j++)
{
switch (board[i][j])
{
case CWHITE:
putchar('O');
break;
case CBLACK:
putchar('*');
break;
case CBLANK:
putchar('_');
break;
default:
putchar('?');
break;
}
putchar(' ');
}
putchar('\n');
}
}

void swc(CHESS chess, int *black, int *white, int *bmax, int *wmax) //判斷
{
switch (chess)
{
case CBLACK:
*white = 0;
(*black)++;
break;
case CWHITE:
*black = 0;
(*white)++;
break;
case CBLANK:
*black = 0;
*white = 0;
break;
default:
break;
}

if (*black > *bmax) *bmax = *black;
if (*white > *wmax) *wmax = *white;
}

GAMEFLAG res(CHESS board[SIZE][SIZE]) //判斷輸贏
{
int i, j;
int win[4] = {0, 0, 0, 0};
int rblack, rwhite, cblack, cwhite,
loblack = 0, lowhite = 0,
roblack = 0, rowhite = 0,
bmax = 0, wmax = 0;

for (i=0; i < SIZE; i++)
{
rblack = 0;
rwhite = 0;
cblack = 0;
cwhite = 0;

swc(board[i][i], &loblack, &lowhite, &bmax, &wmax);
swc(board[i][SIZE-i-1], &roblack, &rowhite, &bmax, &wmax);

for (j=0; j < SIZE; j++)
{
swc(board[i][j], &rblack, &rwhite, &bmax, &wmax);
swc(board[j][i], &cblack, &cwhite, &bmax, &wmax);

}

}

if (bmax >= 3)
{
if (wmax >= 3)
{
return GM_ERROR;
}
else
{
return GM_WIN;
}
}
else
{
if (wmax >= 3)
{
return GM_LOST;
}
else
{
return GM_UNKNOW;
}
}

}

int move(CHESS board[SIZE][SIZE], CHESS chs, int x, int y)
{
int bs = 1;
if (board[x][y])
bs = 0;
else if (y >= SIZE || y < 0 || x >= SIZE || x < 0)
bs = 0;
else
board[x][y] = chs;

return bs;
}

int main()
{
CHESS b[SIZE][SIZE];
char *msg[] = {"BLACK WIN!\n", "WHITE LOST!", "NOT YET", "ERROR!!"};
char *plr[] = {"NON", "BLACK", "WHITE"};
CHESS p = CBLACK;
GAMEFLAG flg;

init_board(b);
while ((flg = res(b)) == GM_UNKNOW)
{
int x, y, bmv = 1;
system("cls");
print_chess(b);
while (bmv)
{
printf("%s回合,輸入坐標:", plr[p]);
scanf("%d%d", &x, &y);
bmv = !move(b,p,x-1,y-1);
}
p = (CHESS)(CWHITE + CBLACK - p);
}

printf("%s", msg[flg]);
system("pause");

return 0;
}

有加分有注釋!!

㈧ 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;i<MAX_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])
{
cout<<board[0][0]<<" | "<<board[0][1]<<" | "<<board[0][2]<<endl;
cout<<"--+---+--"<<endl;
cout<<board[1][0]<<" | "<<board[1][1]<<" | "<<board[1][2]<<endl;
cout<<"--+---+--"<<endl;
cout<<board[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: ";
cin>>m;
for(i=0;i<3;i++)
for(j=0;j<3;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);
}

熱點內容
php連接加密 發布:2025-03-21 23:18:55 瀏覽:833
ftp上傳和下載命令 發布:2025-03-21 22:59:45 瀏覽:85
壓縮包如何在電腦解壓 發布:2025-03-21 22:47:06 瀏覽:95
java氣候 發布:2025-03-21 22:37:19 瀏覽:143
外文期刊資料庫檢索 發布:2025-03-21 22:37:05 瀏覽:10
時間大使莫莫ftp 發布:2025-03-21 22:36:24 瀏覽:844
qtp腳本循環 發布:2025-03-21 22:28:05 瀏覽:280
寫腳本人員 發布:2025-03-21 22:21:07 瀏覽:57
sql一個表另一個表 發布:2025-03-21 22:19:27 瀏覽:464
安卓收割機哪個型號好 發布:2025-03-21 22:12:34 瀏覽:88