【C語言】實現小遊戲三子棋
阿新 • • 發佈:2018-12-09
三子棋的規則:在九宮格棋盤中,只要橫、豎、對角線都能走成一條直線,就贏了。
我將實現三子棋遊戲的程式分為三個部分
第一部分:標頭檔案 game.h
#ifndef _GAME_H_ #define _GAME_H_ #include <string.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #define ROW 3 #define COL 3 void InitBoard(char arr[ROW][COL], int row, int col); void DisplayBoard(char arr[ROW][COL], int row, int col); void PlayerMove(char arr[ROW][COL], int row, int col); void ComputerMove(char arr[ROW][COL], int row, int col); char IsWin(char arr[ROW][COL], int row, int col); #endif
第二部分:原始檔 game.c
#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" void game() { char ret = 0; char arr[ROW][COL]; InitBoard(arr, ROW, COL); do { PlayerMove(arr, ROW, COL); DisplayBoard(arr, ROW, COL); ret = IsWin(arr, ROW, COL); if(ret!=0) break; ComputerMove(arr, ROW, COL); DisplayBoard(arr, ROW, COL); ret = IsWin(arr, ROW, COL); }while(ret==0); if(ret=='X') printf("恭喜你贏了\n"); if(ret=='*') printf("你輸了\n"); if(ret=='q') printf("平局\n"); } char arr[ROW][COL]; void InitBoard(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++) { arr[i][j] = ' '; } } } void DisplayBoard(char arr[ROW][COL], int row, int col) { int i = 0; for(i=0; i<row; i++) { printf(" %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]); if(i!=row-1) printf("---|---|---\n"); } } void PlayerMove(char arr[ROW][COL], int row, int col) { int m = 0, n = 0; printf("玩家走:\n"); while(1) { scanf("%d %d", &m, &n); if((m>=1)&&(m<=row)&&(n>=1)&&(n<=col)) { if(arr[m-1][n-1]==' ') { arr[m-1][n-1]='X'; break; } else printf("此位置被佔用,請重新輸入\n"); } else printf("輸入錯誤,請重新輸入\n"); } } void ComputerMove(char arr[ROW][COL], int row, int col) { int m = 0, n = 0; printf("電腦走:\n"); while(1) { m = rand()%row; n = rand()%col; if(arr[m][n]==' ') { arr[m][n]='*'; break; } } } int IsFull(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 IsWin(char arr[ROW][COL], int row, int col) { int i = 0, j = 0; for(i=0; i<row; i++) { if((arr[i][0]==arr[i][1])&&(arr[i][1]==arr[i][2])&&(arr[i][0]!=' ')) return arr[i][0]; } for(j=0; j<col; j++) { if((arr[0][j]==arr[1][j])&&(arr[1][j]==arr[2][j])&&(arr[0][j]!=' ')) return arr[0][j]; } if((arr[0][0]==arr[1][1])&&(arr[1][1]==arr[2][2])&&(arr[0][0]!=' ')) return arr[0][0]; else if((arr[0][2]==arr[1][1])&&(arr[1][1]==arr[2][0])&&(arr[0][2]!=' ')) return arr[0][0]; else if(IsFull(arr, row, col)) return 'q'; return 0; }
第三部分:原始檔 test.c
#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" void menu() { printf("***********************************\n"); printf("********** 1. play ***********\n"); printf("********** 0. exit ***********\n"); printf("***********************************\n"); } int main() { int a = 0; srand((unsigned int)time(NULL)); do { menu(); printf("請選擇:"); scanf("%d", &a); switch(a) { case 1: game(); break; case 0: break; default: printf("輸入錯誤,請重新輸入\n"); break; } }while(a); return 0; }