C语言学了一段时间了,在这里就展示以下用C语言实现三子棋的小游戏。
//game.h
#ifndef __GAME_h__
#define __GAME_h__
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 3
void DisplayBoard(char[ROW][COL] , int row, int col) ;
void InitBoard(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) ;
int IsFull(char board[ROW][COL], int row, int col) ;
char IsWin(char board[ROW][COL], int row, int col) ;
void game() ;
#endif
//game.c
#include <stdio.h>
#include "game.h"
#define _CRT_SECURE_NO_WARNINGS 1
//打印棋盘
void DisplayBoard(char board[ROW][COL] , int row, int col)
{
int i = 0 ;
int j = 0 ;
for(i=0; i<=row; i++)
{
for(j=0; j<row; j++)
{
printf(" |") ;
}
printf("\n") ;
for(j=0 ; j<=col; j++)
{
if (i == row)
{
break;
}
else if (j < col)
{
printf("--%c" , board[i][j]) ;
}
else if( j == col)
{
printf("--") ;
}
}
printf("\n");
}
}
//初始化棋盘
void 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] = ' ' ;
}
}
}
//玩家走
void PlayerMove(char board[ROW][COL], int row, int col)
{
int x = 0 ;
int y = 0 ;
while(1)
{
printf("请输入坐标:") ;
scanf("%d%d", &x, &y) ;
if (x>0 && x<=row && y>0 && y<=col)
{
if (' ' == board[x-1][y-1])
{
board[x-1][y-1] = 'o' ;
break ;
}
else
printf("坐标已被占用,请重新输入!\n") ;
}
else
printf("输入不合法,请重新输入!\n") ;
}
}
//电脑走
void ComputerMove(char board[ROW][COL], int row, int col)
{
while(1)
{
int x = rand() % 3 ;
int y = rand() % 3 ;
if (' ' == board[x][y])
{
board[x][y] = 'x' ;
break ;
}
}
}
//判断棋盘是否满
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 ; //棋盘满
}
//判断输赢
char IsWin(char board[ROW][COL], int row, int col)
{
int i = 0 ;
if( IsFull(board, row, col) ==1 )
{
return 'E'; //平局
}
for(i=0; i<row; i++)
{
if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]))
{
return board[i][1];
}
}
for(i=0; i<col; i++)
{
if ((board[0][i] == board[1][i]) && (board[1][i] == board[2][i]))
{
return board[1][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];
}
return ' ' ;//既没有输赢,也没有满
}
void game()
{
char board[ROW][COL] = { 0 } ;
char ret = '0' ;
InitBoard(board, ROW, COL) ;
DisplayBoard(board, ROW, COL) ;
do
{
printf("电脑走: \n") ;
ComputerMove(board, ROW, COL) ;
DisplayBoard(board, ROW, COL) ;
if( IsWin(board, ROW, COL) != ' ')
{
break ;
}
printf("玩家走: \n") ;
PlayerMove(board, ROW, COL) ;
DisplayBoard(board, ROW, COL) ;
if( IsWin(board, ROW, COL) != ' ')
{
break ;
}
}while(1) ;
if ( IsWin(board, ROW, COL) == 'E')
{
printf("平局!\n") ;
}
else if ( IsWin(board, ROW, COL) == 'o')
{
printf("恭喜玩家获胜!\n") ;
}
else if ( IsWin(board, ROW, COL) == 'x')
{
printf("恭喜电脑获胜!\n") ;
}
}
//test.c
#include <stdio.h>
#include "game.h"
void menu()
{
printf("┌────────────┐\n") ;
printf("│ 欢迎使用 │\n") ;
printf("└────────────┘\n") ;
printf("┌────────────┐\n") ;
printf("│ 1.开始游戏 │\n") ;
printf("└────────────┘\n") ;
printf("┌────────────┐\n") ;
printf("│ 0.退出游戏 │\n") ;
printf("└────────────┘\n") ;
}
int main()
{
int input = 0 ;//让用户输入选项执行相应的操作
do
{
srand ((unsigned int) time (NULL )) ;//随机数
menu() ;
printf("请选择: ") ;
scanf("%d" , &input) ;
switch(input)
{
//scanf("%d" , &input) ;
case 1 :
game() ;
break ;
case 0 :
printf("即将退出游戏!\n") ;
break ;
default :
printf("输入错误,请重新输入!\n") ;
}
}while(input) ;
return 0 ;
}
试运行: