日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

三子棋小游戏,目前还不够智能。

發布時間:2024/1/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三子棋小游戏,目前还不够智能。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

以下時代碼:代碼內部注釋非常全,就解釋了。

玩游戲過程,電腦時隨機下的,非常的不智能:哎?

1.代碼實現

2.把整個工程分為3個文件,test.c,game.c,game.h

?3. test.c存放main函數,和測試函數函數test()以及游戲菜單;

?(1)游戲菜單

?(2)主函數

?(3)測試及調用函數實現功能

4,需要自己實現的函數

(1)初始化棋盤函數

(2)打印棋盤函數

(3)玩家下棋函數

(4)電腦下棋函數

(5)判斷是否贏了的函數

(6)? 判斷棋盤是否下滿的函數,配的判斷是否贏了的函數判斷是否是平局

5,函數的聲明的頭文件的聲明都放到這里面

?6, 每個函數盡量只實現一個功能,這樣我們的代碼會更有序,更易修改? ?

*** 比如我們把判斷棋盤是否滿了函數單獨寫一個判滿函數7. 把棋盤的行、列定義為宏,便于修改

8,代碼的全部文本實現

test.c(測試部分)

game.h(函數頭文件聲明部分)

game.c? ?(函數實現部分)


以下時代碼:代碼內部注釋非常全,就解釋了。

玩游戲過程,電腦時隨機下的,非常的不智能:哎

1.代碼實現


首先我們要知道,寫這樣一個游戲,我們會寫很多行的代碼,而如果這時候我們規劃不得當的話,我們的代碼就會變得非常亂,為了讓我們的代碼有序,因此我們遵照以下規則:

2.把整個工程分為3個文件,test.c,game.c,game.h


3. test.c存放main函數,和測試函數函數test()以及游戲菜單;

?(1)游戲菜單

?(2)主函數

?(3)測試及調用函數實現功能

4,需要自己實現的函數

(1)初始化棋盤函數

(2)打印棋盤函數

(3)玩家下棋函數

(4)電腦下棋函數

(5)判斷是否贏了的函數

(6)? 判斷棋盤是否下滿的函數,配的判斷是否贏了的函數判斷是否是平局

?

5,函數的聲明的頭文件的聲明都放到這里面


6, 每個函數盡量只實現一個功能,這樣我們的代碼會更有序,更易修改? ?

*** 比如我們把判斷棋盤是否滿了函數單獨寫一個判滿函數
7. 把棋盤的行、列定義為宏,便于修改

8,代碼的全部文本實現


————————————————
版權聲明:本文為CSDN博主「fucktheperfect」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/csdnwqy030429/article/details/121191851

test.c(測試部分)

#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void meau() {printf("**************************\n");printf("***1,paly*****0,exit******\n");printf("**************************\n");} void game() {//數據存儲到一個字符的二維數組中,玩家下棋是'*',電腦下棋是'#',char board[ROW][COL] = { 0 };//initboard(board,ROW,COL); //初始化棋盤 //*****不要這樣傳參 initboard(board[ROW][COL],ROW,COL);printboard(board, ROW, COL);//打印棋盤 // ****傳數組名就好了。//下棋,不是之下一步棋,所以這里是一個循環。char ret = 0; // 電腦贏 return # // 玩家贏 return * // 平局 return Q // 繼續 return C while (1){player_move(board,ROW,COL);printboard(board, ROW, COL);//判斷輸贏ret=is_win(board, ROW, COL);if (ret != 'C') //等于C繼續下,不等于C就結束下棋。************ 沒有這句那就不會結束了。{break;}computer_move(board, ROW, COL);//system("cls"); //清屏函數。printboard(board, ROW, COL);//判斷輸贏ret=is_win(board, ROW, COL);if (ret != 'C'){break;}}if (ret == '*'){printf("玩家贏\n");}else if (ret == '#'){printf("電腦贏\n");}else{printf("平局\n");} }void test() {int input = 0;srand((unsigned int)time(NULL));do{meau();printf("請選擇->");scanf("%d",&input);switch (input){case 1:game();break;case 0:printf("退出游戲\n");break;default:printf("輸入錯誤\n");break;}} while (input);} int main() {test();return 0; }

game.h(函數頭文件聲明部分)

#define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include<stdio.h> #include<stdlib.h> #include<time.h>#define ROW 3 #define COL 3 void initboard(char board[ROW][COL], int row, int col); void printboard(char board[ROW][COL], int row,int col); void player_move(char board[ROW][COL], int row, int col); void computer_move(char board[ROW][COL], int row, int col); char is_win(char board[ROW][COL], int row, int col); int is_full(board, row, col);

game.c? ?(函數實現部分)

#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void initboard(char board[ROW][COL], int row, int col) {for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){board[i][j] =' ';}} } void printboard(char board[ROW][COL], int row, int col) {//打印數據行int i = 0;int j = 0;for (i = 0; i < row; i++){//打印數據for (j = 0; j < col; j++){printf(" %c ",board[i][j]);if(j<col-1)printf("|");}printf("\n");//分割行for (j = 0; j < col; j++){printf("---");if(j<col-1)printf("|");}printf("\n");} } int is_full(char board[ROW][COL], int row, int col) {int i = 0;int j = 0;for (i=0;i<row;i++){for (j = 0; j < col; j++){if (board[i][j]==' ')return 0;}}return 1; } // 電腦贏 return # // 玩家贏 return * // 平局 return Q // 繼續 return C char is_win(char board[ROW][COL], int row, int col) {int i = 0;//三行for (i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')return board[i][0];}//三列for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')return board[0][i];}//對角if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' '){return board[1][1];}if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' '){return board[1][1];}//判斷平局。if (1 == is_full(board, row, col)){return 'Q';}//繼續return 'C'; }void player_move(char board[ROW][COL], int row, int col) {int x = 0;int y = 0;//玩家下的棋可能被下過了,那么就需要重新下棋,所以得來一個循環。while (1){printf("玩家下棋\n");scanf("%d %d",&x,&y);//判斷坐標合法性if (x >= 1 && x <= row && y >= 1 && y <= col) //合法坐標{if (board[x-1][y-1] == ' '){board[x-1][y-1] = '*';break; //下完之后記得跳出循環,不然就死循環了。}else{printf("輸入坐標有棋子,請重新輸入\n");}}else //非法坐標輸入時{printf("輸入坐標非法,重新輸入\n");}} } void computer_move(char board[ROW][COL], int row, int col) {printf("電腦下棋:\n");int x = 0;int y = 0;while (1) {x = rand() % row;y = rand() % col;if (board[x][y] == ' '){board[x][y] = '#';break;}} }

總結

以上是生活随笔為你收集整理的三子棋小游戏,目前还不够智能。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。