game.c
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
void start()
{
printf("*****************************\n");
printf("********1.单人游戏***********\n");
printf("********2.双人游戏***********\n");
printf("********0.退出游戏***********\n");
printf("*****************************\n");
}
void showboard(char board[ROW][COL])
{
int i = 0;
int j = 0;
for ( i = 0;i < ROW; i++)
{
for ( j = 0;j < COL;j++)
{
printf(" %c ", board[i][j]);
if (j < COL - 1)
printf("|");
}
printf("\n");
for (j = 0; j < COL; j++)
{
if (i < ROW - 1)
printf("___");
else
printf(" ");
if (j < COL - 1)
printf("|");
}
printf("\n");
}
}
void initborad(char board[ROW][COL])
{
int i = 0;
int j = 0;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
board[i][j] = ' ';
}
}
}
void player1do(char board[ROW][COL])
{
int x = 0;
int y = 0;
printf("*请下棋\n");
while (1) {
scanf("%d %d", &x, &y);
if (x >= 1 && x <= 4 && y >= 1 && y <= 4 )
{
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = '*';
break;
}
else
{
printf("坐标被占用\n");
Sleep(1000);
printf("请重新输入\n");
}
}
else
{
printf("坐标无效\n");
Sleep(1000);
printf("请重新输入\n");
}
}
}
void player2do(char board[ROW][COL])
{
int x = 0;
int y = 0;
printf("$请下棋\n");
while (1) {
scanf("%d %d", &x, &y);
if (x >= 1 && x <= 4 && y >= 1 && y <= 4)
{
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = '$';
break;
}
else
{
printf("坐标被占用\n");
Sleep(1000);
printf("请重新输入\n");
}
}
else
{
printf("坐标无效\n");
Sleep(1000);
printf("请重新输入\n");
}
}
}
void computerdo(char board[ROW][COL])
{
int r = 0;
printf("电脑下棋\n");
while(1)
{
int x = rand() % ROW;
int y = rand() % COL;
if (board[x][y] == ' ')
{
board[x][y] = '$';
break;
}
}
}
int ISwin(char board[ROW][COL])
{
int i = 0;
int j = 0;
char ret = ' ';
for (i = 0; i < ROW; i++)
{
if ((board[i][0] == board[i][1])&&( board[i][1] == board[i][2])&& (board[i][2] == board[i][3]))
ret = board[i][0];
if((board[0][i] == board[1][i]) && (board[1][i] == board[2][i]) && (board[2][i] == board[3][i]))
ret = board[0][i];
}
if((board[0][0] == board[1][1]) && (board[2][2] == board[1][1]) && (board[2][2] == board[3][3]))
ret = board[0][0];
if((board[0][3] == board[1][2]) && (board[1][2] == board[2][1] )&& (board[2][1] == board[3][0]))
ret = board[3][0];
if (ret == '*')
{
printf("*玩家获胜\n");
return 1;
}
if (ret == '$')
{
printf("$玩家获胜\n");
return 1;
}
}
game.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#define ROW 4
#define COL 4
void start();
void game1();
void game2();
void showboard(char board[ROW][COL]);
void initborad(char board[ROW][COL]);
void player1do(char board[ROW][COL]);
void player2do(char board[ROW][COL]);
void computerdo(char board[ROW][COL]);
int ISwin(char board[ROW][COL]);
test.c
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
void game1()
{
char board[ROW][COL] = { '\0'};
initborad(board);
showboard(board);
do
{
player1do(board);
showboard(board);
Sleep(1000);
if (ISwin(board) == 1)
break;
computerdo(board);
Sleep(000);
showboard(board);
if (ISwin(board) == 1)
break;
}while (1);
}
void game2()
{
char board[ROW][COL] = { '\0' };
initborad(board);
showboard(board);
do
{
player1do(board);
showboard(board);
Sleep(1000);
if (ISwin(board) == 1)
break;
player2do(board);
showboard(board);
Sleep(1000);
if (ISwin(board) == 1)
break;
} while (1);
}
int main()
{
srand((unsigned int)(time(NULL)));
int input = 0;
do
{
start();
scanf("%d", &input);
switch (input)
{
case 1:
printf("单人游戏开始\n");
Sleep(1000);
game1();
break;
case 2:
printf("双人游戏开始\n");
Sleep(1000);
game2();
break;
case 0:
printf("游戏结束\n");
break;
default:
printf("输入错误\n");
break;
}
break;
} while (input);
return 0;
}