三子棋小游戏,目前还不够智能。
目錄
以下時(shí)代碼:代碼內(nèi)部注釋非常全,就解釋了。
玩游戲過程,電腦時(shí)隨機(jī)下的,非常的不智能:哎?
1.代碼實(shí)現(xiàn)
2.把整個(gè)工程分為3個(gè)文件,test.c,game.c,game.h
?3. test.c存放main函數(shù),和測試函數(shù)函數(shù)test()以及游戲菜單;
?(1)游戲菜單
?(2)主函數(shù)
?(3)測試及調(diào)用函數(shù)實(shí)現(xiàn)功能
4,需要自己實(shí)現(xiàn)的函數(shù)
(1)初始化棋盤函數(shù)
(2)打印棋盤函數(shù)
(3)玩家下棋函數(shù)
(4)電腦下棋函數(shù)
(5)判斷是否贏了的函數(shù)
(6)? 判斷棋盤是否下滿的函數(shù),配的判斷是否贏了的函數(shù)判斷是否是平局
5,函數(shù)的聲明的頭文件的聲明都放到這里面
?6, 每個(gè)函數(shù)盡量只實(shí)現(xiàn)一個(gè)功能,這樣我們的代碼會更有序,更易修改? ?
*** 比如我們把判斷棋盤是否滿了函數(shù)單獨(dú)寫一個(gè)判滿函數(shù)7. 把棋盤的行、列定義為宏,便于修改
8,代碼的全部文本實(shí)現(xiàn)
test.c(測試部分)
game.h(函數(shù)頭文件聲明部分)
game.c? ?(函數(shù)實(shí)現(xiàn)部分)
以下時(shí)代碼:代碼內(nèi)部注釋非常全,就解釋了。
玩游戲過程,電腦時(shí)隨機(jī)下的,非常的不智能:哎
1.代碼實(shí)現(xiàn)
首先我們要知道,寫這樣一個(gè)游戲,我們會寫很多行的代碼,而如果這時(shí)候我們規(guī)劃不得當(dāng)?shù)脑?#xff0c;我們的代碼就會變得非常亂,為了讓我們的代碼有序,因此我們遵照以下規(guī)則:
2.把整個(gè)工程分為3個(gè)文件,test.c,game.c,game.h
3. test.c存放main函數(shù),和測試函數(shù)函數(shù)test()以及游戲菜單;
?(1)游戲菜單
?(2)主函數(shù)
?(3)測試及調(diào)用函數(shù)實(shí)現(xiàn)功能
4,需要自己實(shí)現(xiàn)的函數(shù)
(1)初始化棋盤函數(shù)
(2)打印棋盤函數(shù)
(3)玩家下棋函數(shù)
(4)電腦下棋函數(shù)
(5)判斷是否贏了的函數(shù)
(6)? 判斷棋盤是否下滿的函數(shù),配的判斷是否贏了的函數(shù)判斷是否是平局
?
5,函數(shù)的聲明的頭文件的聲明都放到這里面
6, 每個(gè)函數(shù)盡量只實(shí)現(xiàn)一個(gè)功能,這樣我們的代碼會更有序,更易修改? ?
*** 比如我們把判斷棋盤是否滿了函數(shù)單獨(dú)寫一個(gè)判滿函數(shù)
7. 把棋盤的行、列定義為宏,便于修改
8,代碼的全部文本實(shí)現(xiàn)
————————————————
版權(quán)聲明:本文為CSDN博主「fucktheperfect」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接: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() {//數(shù)據(jù)存儲到一個(gè)字符的二維數(shù)組中,玩家下棋是'*',電腦下棋是'#',char board[ROW][COL] = { 0 };//initboard(board,ROW,COL); //初始化棋盤 //*****不要這樣傳參 initboard(board[ROW][COL],ROW,COL);printboard(board, ROW, COL);//打印棋盤 // ****傳數(shù)組名就好了。//下棋,不是之下一步棋,所以這里是一個(gè)循環(huán)。char ret = 0; // 電腦贏 return # // 玩家贏 return * // 平局 return Q // 繼續(xù) return C while (1){player_move(board,ROW,COL);printboard(board, ROW, COL);//判斷輸贏ret=is_win(board, ROW, COL);if (ret != 'C') //等于C繼續(xù)下,不等于C就結(jié)束下棋。************ 沒有這句那就不會結(jié)束了。{break;}computer_move(board, ROW, COL);//system("cls"); //清屏函數(shù)。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("輸入錯(cuò)誤\n");break;}} while (input);} int main() {test();return 0; }game.h(函數(shù)頭文件聲明部分)
#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? ?(函數(shù)實(shí)現(xiàn)部分)
#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) {//打印數(shù)據(jù)行int i = 0;int j = 0;for (i = 0; i < row; i++){//打印數(shù)據(jù)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 // 繼續(xù) 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';}//繼續(xù)return 'C'; }void player_move(char board[ROW][COL], int row, int col) {int x = 0;int y = 0;//玩家下的棋可能被下過了,那么就需要重新下棋,所以得來一個(gè)循環(huán)。while (1){printf("玩家下棋\n");scanf("%d %d",&x,&y);//判斷坐標(biāo)合法性if (x >= 1 && x <= row && y >= 1 && y <= col) //合法坐標(biāo){if (board[x-1][y-1] == ' '){board[x-1][y-1] = '*';break; //下完之后記得跳出循環(huán),不然就死循環(huán)了。}else{printf("輸入坐標(biāo)有棋子,請重新輸入\n");}}else //非法坐標(biāo)輸入時(shí){printf("輸入坐標(biāo)非法,重新輸入\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;}} }總結(jié)
以上是生活随笔為你收集整理的三子棋小游戏,目前还不够智能。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第三方厂商受陷,数百万 ATT 客户数据
- 下一篇: quotename mysql_在MyS