三字棋代码
頭文件
#define ROW 3#define COL 3//頭文件的包含#include<string.h>#include<stdio.h>#include<stdlib.h>#include<time.h>//函數聲明//初始化棋盤void InitBoard(char board[ROW][COL],int row,int col);//打印棋盤void DisplayBoard(char board[ROW][COL], int row,int col);void PlayerMove(char board[ROW][COL], int row, int col);void ComputerMove(char board[ROW][COL], int row, int col);char IsWin(char board[ROW][COL], int row, int col);game.c 函數的實現
#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" #include<stdlib.h> #include<time.h> int IsFull(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;} void InitBoard(char board[ROW][COL], int row,int col) {int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){board[i][j] = ' ';}} } void DisplayBoard(char board[ROW][COL], int row, int col) {int i = 0;int j = 0;for (i = 0; i < row; i++){printf(" %c | %c | %c\n", board[i][0], board[i][1], board[i][2]);if(i<row-1)printf("---|---|---\n"); } } void PlayerMove(char board[ROW][COL], int row, int col) {int x = 0;int y = 0;printf("玩家下棋:\n");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");}} } void ComputerMove(char board[ROW][COL], int row, int col) {//電腦隨機下棋int x;int y;printf("電腦下棋:\n");while (1){x = rand() % row;y = rand() % col;if (board[x][y] == ' '){board[x][y] = '#';break;}}} char IsWin(char board[ROW][COL], int row, int col) //玩家贏-‘*’電腦贏—‘#’平局—‘q’繼續—‘c’ {int i = 0;for (i = 0; i < row; i++){if (board[i][0] == board[i][1] == board[i][2]&&board[i][0]!=' '){return board[i][0];}}for (int j = 0; j< col; j++){if (board[0][i] == board[1][i] == board[2][i] && board[0][i] != ' '){return board[0][i];}}if (board[0][0] == board[1][1] == board[2][2] && board[0][0] != ' '){return board[0][0];}else if (board[0][2] == board[1][1] == board[2][0] && board[0][2] != ' '){return board[1][1];}//判斷是否平局else if (IsFull(board, ROW, COL)){return 'q';}//游戲繼續return 'c'; }test.c 測試游戲的邏輯源文件
#include <stdio.h>#include"game.h"void menu()//規劃菜單{printf("*****************************\n");printf("******** 1.paly *********\n");printf("******** 0.exit *********\n");printf("*****************************\n");}void game(){char ret = 0;//存放數據需要一個3*3的二維數組char board[ROW][COL] = { 0 };//初始化棋盤InitBoard(board, ROW, COL);//顯示棋盤DisplayBoard(board, ROW, COL);while (1){//玩家下棋PlayerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//打印棋盤//判斷輸贏 玩家贏 電腦贏 平局 繼續ret = IsWin(board, ROW, COL);if (ret != 'c'){break;}//電腦下棋ComputerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);ret = IsWin(board, ROW, COL);if (ret != 'c'){break;}//打印棋盤//判斷輸贏}if (ret == '*'){printf("玩家贏\n");}else if (ret == '#'){printf("電腦贏\n");}else if (ret == 'q'){printf("平局\n");}}int main(){int input = 0;do{menu();printf("請選擇:");scanf("%d", &input);switch (input){case 1:game();break;case 0:break;default:printf("選擇錯誤,請重新選擇");break;}} while (input);return 0;}總結
- 上一篇: 一小时学会js正则表达式
- 下一篇: PHP解决数学的游戏问题,幼儿园数学区域