实现三子棋小游戏
1.srand函數、time函數
(1)srand()函數表示設置一個隨機種子,每次運行都能使隨機種子不同,但如果重新運行會與上次運行時的結果一樣,可配合時間戳time()函數解決,srand()函數類型為unsigned int,頭文件為<stdlib.h>,time()函數類型為time_t,頭文件為<time.h>
(2)語句:srand((unsigned int)time(NULL))------>由于類型不兼容,需強制類型轉換
2.rand函數
(1)設置了隨機種子之后配合rand函數產生一個隨機數,生成范圍:[0,32769],若需控制生成范圍可通過%的辦法來獲取所需的范圍
(2)Eg:生成一個隨機數范圍為[0,99],語句:rand()%100
3.實現三子棋小游戲
(1)頭文件lin.h(聲明函數)
#pragma once #include <stdio.h> #include <stdlib.h> #include <time.h> //行 #define ROW 3 //列 #define COL 3//聲明控制間距 void distance();//聲明初始化棋盤為空格 void My_lin(char arr[ROW][COL], int row, int col); //聲明打印棋盤 void My_print(char arr[ROW][COL],int row,int col);//聲明玩家下棋 void My_qin(char arr[ROW][COL],int row, int col);//聲明電腦下棋 void My_yan(char arr[ROW][COL], int row, int col);//聲明判斷輸贏 char My_li(char arr[ROW][COL], int row, int col);(2)源文件lin.c(實現函數)
#include"lin.h" //實現控制間距 void distance() {printf("\n\n\n"); }//實現初始化棋盤為空格 void My_lin(char arr[ROW][ROW], int row, int col) {for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){arr[i][j] = ' ';}} }//實現打印棋盤 void My_print(char arr[ROW][COL], int row, int col) {int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){printf(" %c ", arr[i][j]);if (j < col - 1){printf("|");}}printf("\n");if (i < row - 1){printf("---|---|---\n");}} }//實現玩家下棋 void My_qin(char arr[ROW][COL], int row, int col) {int x = 0;int y = 0;while (1){printf("玩家回合\n");printf("請輸入坐標(坐標請用空格隔開):");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >=1 && y <= col){if (arr[x - 1][y - 1] == ' '){arr[x - 1][y - 1] = '*'; break;}else{printf("坐標以被占用,請重新輸入\n");//控制間距distance();}}else{printf("坐標無效,請重新輸入\n");}} }//實現電腦下棋 void My_yan(char arr[ROW][COL], int row, int col) {int x = 0;int y = 0;printf("電腦回合\n");while (1){//設置隨機范圍[0,(row-1)]x = rand() % row;//設置隨機范圍[0,(col-1)]y = rand() % col;if (arr[x][y] == ' '){arr[x][y] = '#'; break;}} }//實現判斷平局 static int My_draw(char arr[ROW][COL], int row, int col) {int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){if (arr[i][j] == ' '){return 0;}}}return 1; }//實現判斷輸贏 char My_li(char arr[ROW][COL], int row, int col) {int i = 0;//判斷三行for (i = 0; i < row; i++){if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][1] != ' '){return arr[i][1];}}//判斷三列for (i = 0; i < col; i++){if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[1][i] != ' '){return arr[i][1];}}//判斷對角線if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' '){return arr[1][1];}if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' '){return arr[1][1];}//判斷平局if (1 == My_draw(arr, ROW, COL)){return 'L';}//游戲繼續return 'M'; }(3)源文件test.c(主函數)
#include "lin.h" void menu() {//控制間距distance();printf(" 1.開始游戲 \n");printf(" 2.退出游戲 \n");//控制間距distance(); } void lin() {char ret = 0;//設置棋盤規格char arr[ROW][COL] = { 0 };//初始化棋盤為空格My_lin(arr,ROW,COL);//打印棋盤My_print(arr, ROW, COL);//控制間距distance();while (1){//玩家回合My_qin(arr, ROW, COL);//控制間距distance();//打印棋盤My_print(arr, ROW, COL);//控制間距distance();//判斷輸贏ret=My_li(arr,ROW,COL);if (ret != 'M'){break;}//電腦回合My_yan(arr, ROW, COL);//控制間距distance();//打印棋盤My_print(arr, ROW, COL);//控制間距distance();//判斷輸贏ret = My_li(arr, ROW, COL);if (ret != 'M'){break;}}if (ret == '*'){printf("恭喜你!獲勝啦");}else if (ret == '#'){printf("很遺憾,輸掉了");}else{printf("雙方不相上下,平局啦");} } void test() {int input = 0;srand((unsigned int)time(NULL));do{//打印菜單menu();printf("請輸入選項:");scanf("%d", &input);//控制信息間距distance();switch (input){case 1:lin();break;case 2:printf("退出游戲\n");input = 0; break;default:printf("選擇無效,請重新選擇\n"); break;}} while (input); } int main() {test();return 0; }總結
- 上一篇: excel报“不能使用对象链接和嵌入”的
- 下一篇: 广工大物实验十八