當前位置:首頁 » 編程軟體 » 編程棋玩法

編程棋玩法

發布時間: 2023-03-12 10:02:09

① VC++ 編程題 "井字棋"游戲設計(高手請進)

#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;
}

② 五子棋編程

// 程序「五子棋第三方版.exe」運行時,把以前下棋的棋譜保存在「棋譜.txt」文件中,
// 然後調用本程序。
// 本程序的作用是:首先讀入以前的棋譜,然後調用函數「qxwz()」計算出計算機應該
// 下棋的位置,並保存在c中,然後把應下棋的位置寫入文件「當前棋子.txt」
#include <stdio.h>
typedef struct
{
char x;
char y;
} QZ;
QZ qzwz(); //取得應下棋位置,返回值為QZ類型,其中的x,y兩個成員代表應下棋位置
char qp[19][19]; //用於保存棋盤上每個點的狀態,0--空,1--黑棋,2--白棋
void main()
{
FILE *fp;
int tmp1,tmp2,tmp3;
QZ c;
/* 讀入當前棋譜 */
if((fp=fopen("棋譜.txt","r"))==NULL)
{
printf("[棋譜.TXT]文件打開失敗!\n");
return;
}
while(!feof(fp))
{
tmp1=tmp2=tmp3=-1;
fscanf(fp,"%d%d%d",&tmp1,&tmp2,&tmp3);
if(tmp3!=-1)
{
qp[tmp1][tmp2]=tmp3;
}
}
fclose(fp);
c=qzwz();
if((fp=fopen("當前棋子.txt","w"))==NULL)
{
printf("[當前棋子.TXT]文件打開失敗!\n");
return;
}
fprintf(fp,"%d,%d,%d",c.x,c.y,2); //將應下棋位置傳送到文件中
fclose(fp);
}

QZ qzwz()
{
(把這裡面的程序補充完整就好了)

} 這個程序要求是:
1。只適用於人先下,機器後下的情況。有了「五子棋第三方版.exe」來製作下棋界面,就只需要編寫下棋演算法,而不必考慮其它的問題了。
2.當運行「五子棋第三方版.exe」程序時,該程序接受人下棋位置,然後調用「wzq.exe」程序,由「wzq.exe」程序計算出機器的應對並寫入到「當前棋子.txt」文件中(結束),機器的應對結果由「五子棋第三方版.exe」負責讀入,並等待人下一步的應對。
3.要做的工作就是,完成「wzq.cpp」 中「qxwz()」函數的設計,使之能返回一個比較好的下棋位置。在設計過程中,可以增加全局變數以保存你認為有必要保存的數據,可以增加其它文件,用來保存你認為下次調用還有必要使用的數據,可以增加其它函數以方便下棋位置的計算過程。總之,所給出的「wzq.cpp」程序只是一個框架,在不影響其功能的情況下,可以隨意更改。

③ 求用C語言編程實現一個國際象棋 馬怎麼走的問題

C語言我不會,下面這個是易語言的,希望你能借鑒一下:
熟悉國際象棋的人都知道,馬在某個方格,可以在一步內到達的不同位置最多有8個。如圖所示:
#4#3#
5#0#2
6###1
#7#8#
(1)對馬走的方法可以設定一個順序,如當前位置在棋盤的(i,j)方格,下一個可能的位置依次為(i+2,j+1),(i+1,j+2),(i-1,j+2),(i-2,j+1),(i-2,j-1),(i-1,j-2),(i+1,j-2),(i+2,j-1),實際可以走的位置很明顯僅僅限於還未走過的和不越出邊界的那些位置。

(2)這里我們定義馬在一步內實際可以走的位置數為馬在當前位置的出口數,此外,為便於程序的統一處理,這里引入兩個數組「行變化數組」和 「列變化數組」,分別儲存8種可能走法對馬當前所在位置的橫縱坐標的增量。

(3)本題用貪心法策略求解。 當馬處於某一位置時,其選擇下一位置的准則為:從馬當前位置所允許走的位置中,選擇出口數最少的哪個位置。如馬的當前位置只有3個出口,它們的出口數分別為4,2,3,則程序就選擇出口數為2的那個出口。 演算法簡單描述,馬從棋盤第一行第一列位置開始出發;預設著法選擇順序控制變數「方法編號」為1;
{
循環判斷首()
模擬棋盤數組初始化為0;
行號=起始行號;列號=起始列號;
計次循環首(63,當前遍歷步數)
如果(馬當前位置沒有出口)
返回(-1)
否則 行號按返回方法改變;列號按返回方法改變。
在棋盤相對位置記錄為第幾步驟;
如果(找到解)
輸出模擬棋盤數組;
終止循環;
否則 方法編號=方法編號+1;
循環判斷尾(沒有找到解)
}

上述演算法在整個找解的過程一直向前,所以能非常快地找到解。但是對於某些開始位置,實際上有解可程序第一次找不到解,則程序只要變換8中可能出口的順序,就能找到解。考慮到這種變換8種方法的情況,程序引用「方法編號「用於控制8種可能走法的順序。開始為1時不能找到解,就讓"方法編號"加1,重新找解。

④ C語言 怎麼編程井字棋

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

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

熱點內容
幻境7腳本 發布:2025-07-20 22:51:25 瀏覽:435
怎麼配置vs2015的環境變數 發布:2025-07-20 22:48:49 瀏覽:56
為什麼開鎖人不建議安裝密碼鎖 發布:2025-07-20 22:41:56 瀏覽:254
phpsocketlisten 發布:2025-07-20 22:39:07 瀏覽:429
絕地求生未來之役要下什麼伺服器 發布:2025-07-20 22:34:26 瀏覽:67
linux對比工具 發布:2025-07-20 22:31:45 瀏覽:750
音樂緩存在什麼文件夾 發布:2025-07-20 22:31:40 瀏覽:818
ftp伺服器怎麼清理 發布:2025-07-20 22:08:26 瀏覽:4
點膠緩存機 發布:2025-07-20 22:06:45 瀏覽:738
手機存儲已損壞 發布:2025-07-20 21:51:00 瀏覽:54