頭文件數組
#define _CRT_SECURE_NO_WARNINGS 1 #pragma once #define ROW 3 #define COL 3 #include <stdio.h> #include <time.h> #include <stdlib.h> //#include <> //函數的聲明 InitBoard(char board[ROW][COL], int row, int col); DisplayBoard(char board[ROW][COL], int row, int col); PlayerMove(char board[ROW][COL], int row, int col); ComputerMove(char board[ROW][COL], int row, int col); //四種結果 玩家贏 ‘*’ //電腦贏 '#' //平局 'Q' //繼續 'C' char Iswin(char board[ROW][COL], int row, int col);
定義函數框架
#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" InitBoard(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++) { board[i][j] = ' '; } } } // | | // ---|---|--- // | | // ---|---|--- // | | DisplayBoard(char board[ROW][COL], int row, int col) { int i = 0; int j = 0; for (i = 0; i < col; i++) { for (j = 0; j < row; j++) { printf(" %c ",board[i][j]); if (j == row - 1) { printf("\n"); break; } printf("|"); } for (j = 0; j < row; j++) { if (i == col - 1) break; printf("---"); if (j == row - 1) { printf("\n"); break; } printf("|"); } } } PlayerMove(char board[ROW][COL], int row, int col) { printf("輪到玩家\n"); int i = 0; int j = 0; while (1) { printf("請輸入要下的座標 \n"); scanf("%d%d", &i, &j); if (i <= row && i >= 1 && j <= col && j >= 1 ) { if (board[i - 1][j - 1] == ' ') { board[i - 1][j - 1] = '*'; break; } else { printf("該座標已經被佔用\n"); } } else printf("非法座標,請從新輸入\n"); } } ComputerMove(char board[ROW][COL], int row, int col) { printf("電腦下\n"); int x = 0, y = 0; while (1) { x = rand() % row; y = rand() % col; if (board[x][y] == ' ') { board[x][y] = '#'; break; } } } //返回1表示棋盤滿了 0表示沒滿 int Isfull(char board[ROW][COL], int row, int col) { int i = 0, j = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { if (board[i][j] == ' ') { return 0; } } } return 1; } char Iswin(char board[ROW][COL], int row, int col) { int i = 0; int j = 0; //橫行 for (i = 0; i < row; i++) { if (board[i][1] == board[i][2] && board[i][0] == board[i][1] && board[i][0] != ' ') { return board[i][1]; } } //豎列 for (j = 0; j < col; j++) { if (board[1][j] == board[2][j] && board[0][j] == board[1][j] && board[0][j] != ' ') { return board[1][j]; } } //對角線 if (board[1][1] == board[2][2] && board[0][0] == board[1][1] && board[1][1] != ' ') return board[1][1]; if (board[1][1] == board[0][2] && board[2][0] == board[1][1] && board[1][1] != ' ') return board[1][1]; //判斷是否平局 if (1 == Isfull(board, ROW, COL)) { return "Q"; } return 'C'; }
主函數界面ide
#define _CRT_SECURE_NO_WARNINGS 1 //搭建框架,創建測試文件和頭文件。 //每個對應的功能都寫一個對應功能的函數 #include "game.h" void menu() { printf("***************************************\n"); printf("**** 1.Play 0.Exit ****\n"); printf("***************************************\n"); } //遊戲的實現 void game() { char ret = 0; //創建一個數組,做爲棋盤 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 { printf("平局\n"); } } void test() { srand((unsigned int)time(NULL)); int input = 0; do { menu(); printf("三子棋遊戲,請選擇是否開始:\n"); scanf("%d", &input); switch (input) { case 1: printf("遊戲開始\n"); game(); break; case 0: printf("退出遊戲\n"); break; default: printf("輸入錯誤,請從新選擇\n"); break; } } while (input); } int main() { test(); return 0; }
腦闊疼...函數