三子棋小遊戲

Game.h

#define _CRT_SECURE_NO_WARNINGS 

#ifndef __GAME_H__

#define __GAME_H__

 

#include<stdlib.h>

#include<time.h>

#include<stdio.h>

#include<string.h>

 

#define ROWS 3//行數

#define COLS 3//列數

 

void InitBoard(char board[ROWS][COLS], int row, int col);

void Display(char board[ROWS][COLS], int row, int col);

void PlayerMove(char board[ROWS][COLS], int row, int col);

void ComputerMove(char board[ROWS][COLS], int row, int col);

char IsWin(char board[ROWS][COLS], int row, int col);

int  IsFull(char board[ROWS][COLS], int row, int col);

 

#endif __GAME_H__

game.c

#define _CRT_SECURE_NO_WARNINGS 

#include <stdio.h>

#include "game.h"

#include <string.h>

 

int IsFull(char board[ROWS][COLS], int row, int col)// 判斷輸贏

{

int i, j;

for (i = 0; i < row; i++)

for (j = 0; j < col; j++)

{

if (board[i][j] = ' ')

return 0;

}

 

return 1;

}

 

void InitBoard(char board[ROWS][COLS], 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] = '';

//}

//}*/

memset(board, ' ', row*col*sizeof(board[0][0]));

}

void  Display (char board[ROWS][COLS], int row, int col)    //打印棋盤

{

int i = 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[ROWS][COLS], int row, int col)    //玩家開始遊戲

{

int x = 0;

int y = 0;

while (1)

{

printf("請輸入座標: ");

scanf ("%d%d", &x, &y);

if (((x >= 1) && (x <= 3)) && ((y >= 1) && (y <= 3)))   //判斷輸入的座標是否合理

{

if (board[x - 1][y - 1] == ' ')

{

board[x - 1][y - 1] = 'X';

break;

}

else

{

printf("座標已被佔用\n");

}

}

else

{

printf("座標錯誤\n");

}

}

}

void ComputerMove(char board[ROWS][COLS], int row, int col)   //電腦遊戲

{

while (1)

{

 

int x = rand() % 3;   //生成隨機行座標

int y = rand() % 3;    //生成隨機列座標

if (board[x][y] == ' ')

{

board[x][y] = '$';

break;

}

}

}

char  IsWin(char board[ROWS][COLS], 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]))  //連成行

}

}

for (i = 0; i < col; i++)

{

if ((board[0][i] == board[1][i]) && (board[1][i] == board[2][i]))      //連成列

{

return board[0][i];

}

}

if ((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]))  //對角線

{

return board[1][1];

}

if ((board[0][2] == board[1][1]) && (board[1][1] == board[2][0]))

{

return board[1][1];

}

if (IsFull(board, row, col) == 1)  //棋盤若滿,則平局

{

return 'q';

}

return ' ';

}

 

test.c

#define _CRT_SECURE_NO_WARNINGS

 

#include <stdio.h>

#include "game.h"

 

void menu()    //打印菜單

{

printf("*************************\n");

printf("****1.Play   0.Exit  ****\n");

printf("*************************\n");

}

void game()

{

char board[ROWS][COLS] = { 0 };   //定義一個數組

char ret = 0;

InitBoard (board, ROWS, COLS);   //初始化棋盤

Display (board, ROWS, COLS);     //打印棋盤

while (1)      //玩遊戲的過程

{

PlayerMove(board, ROWS, COLS);

ret = IsWin(board, ROWS, COLS);

if (ret != ' ')    //判斷棋盤是否被填滿

{

break;

}

Display(board, ROWS, COLS);

ComputerMove(board, ROWS, COLS);

Display(board, ROWS, COLS);

ret = IsWin(board, ROWS, COLS);

if (ret != ' ')      //判斷棋盤是否被填滿

{

break;

}

Display(board, ROWS, COLS);

}

if (ret == 'X')

{

printf("玩家贏\n");

}

else if (ret == '$')

{

printf("電腦贏\n");

}

else if (ret == 'q')

{

printf("平局\n");

}

}

void test()

{

int  input = 0;

srand((unsigned int)time(NULL));

do                         //選擇是否進行遊戲

{

menu();

printf("請選擇:");

scanf("%d", &input);

switch (input)

{

case 1:  //選擇1開始遊戲

game();

break;

case 0:   //選擇0退出遊戲

break;

default:

printf("選擇錯誤");   //其他選擇,輸入錯誤

break;

}

}

while (input);

}

int main()

{

test();

return 0;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章