三子棋小游戏

来源:互联网 发布:apm飞控源码 编辑:程序博客网 时间:2024/06/02 05:25

        简单版的三子棋游戏并不难,就只是运用二维数组和调用各个函数。

        现在来分析游戏的思路,首先在屏幕上打印一个选择游戏的菜单,这个简单,就只需要调用一个函数输出就可以了,玩家选择开始游戏就进入游戏函数,首先要初始化二维数组,可以用memset()来进行初始化,然后在屏幕上打印出三子棋的棋盘,这个也简单,知识简单的输出罢了。然后就是正式的玩游戏模块了,可以设计玩家先下还是电脑先下,也很简单,只是在电脑下棋时需要设计rand()和srand()来产生随机数,注意要控制随机数的大小,然后在相应的位置设计一个结束游戏的函数,思路非常简单,接下来看游戏代码:

       建立三个文件,函数声明和头文件引入放在game.h中,函数放入game.c中,测试模块放在test.c中。

、、、、、、、game.h、、、、、、、、、、

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define ROW 3
#define COL 3
void itis_board(char board[ROW][COL], int row, int col);
void print_board(char board[ROW][COL], int row, int col);
void people_play(char board[ROW][COL], int row, int col);
void computer_play(char board[ROW][COL], int row, int col);
char sta_board(char board[ROW][COL], int row, int col);

、、、、、、、game.c、、、、、、、、、、

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"

void itis_board(char board[ROW][COL], int row, int col)
{
 memset(board, ' ', row*col * sizeof(char));
}

void print_board(char board[ROW][COL], int row, int col)
{
 int i = 0;
 for (i = 0; i < col; i++)
 {
  printf("%c|%c|%c\n",board[i][0],board[i][1],board[i][2]);
  if (i != col - 1)
  {
   printf("-|-|-\n");
  }
 }
}

void people_play(char board[ROW][COL], int row, int col)
{
 while (1)
 {
  int x = 0, y = 0;
  printf("请输入坐标:");
  scanf("%d %d", &x, &y);
  x--;
  y--;
  if (((x >= 0) && (x <= 2)) && ((y >= 0) && (y <= 2)))
  {
   if (board[x][y] == ' ')
   {
    board[x][y] = 'X';
    break;
   }
   else
   {
    printf("输入有误!\n");
   }
  }
  else
  {
   printf("输入有误!\n");
  }
 }
}

void computer_play(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] = 'O';
   break;
  }
 }
}

int ret_board(char board[ROW][COL], int row, int col)
{
 int i = 0, j = 0;
 for (i = 0; i < col; i++)
 {
  for (j = 0; j < row; j++)
  {
   if (board[i][j] == ' ')
    return -1;
  }
 }
 return 1;
}

char sta_board(char board[ROW][COL], int row, int col)
{
 int i = 0, j = 0;
 for (i = 0; i < col; i++)
 {
  for (j = 0; j < row; j++)
  {
   if ((board[i][0] == board[i][1]) &&
    (board[i][1] == board[i][2]) &&
    (board[i][1] != ' '))
    return board[i][1];
   if ((board[0][j] == board[1][j]) &&
    (board[1][j] == board[2][j]) &&
    (board[1][j] != ' '))
    return board[1][j];
  }
 }
 if ((board[0][0] == board[1][1]) &&
  (board[1][1] == board[2][2]) &&
  (board[1][1] != ' '))
  return board[1][1];
 if ((board[0][2] == board[1][1]) &&
  (board[1][1] == board[2][0]) &&
  (board[1][1] != ' '))
  board[1][1];
 if (ret_board(board,ROW,COL)==1)
  return '1';
 return ' ';
}

、、、、、、、test.c、、、、、、、、、、

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"

test()
{
 char ret = ' ';
 char board[ROW][COL] = { 0 };
 itis_board(board, ROW, COL);
 print_board(board, ROW, COL);
 srand((unsigned int)time(NULL));
 while (1)
 {
  people_play(board, ROW, COL);
  if ((ret=sta_board(board,ROW,COL))!=' ')
   break;
  print_board(board, ROW, COL);
  computer_play(board, ROW, COL);
  if ((ret=sta_board(board,ROW,COL))!=' ')
   break;
  print_board(board, ROW, COL);
 }
 if (ret == 'X')
  printf("你赢了!\n");
 else if (ret == 'O')
  printf("你输了!\n");
 else if (ret == '1')
  printf("平局!\n");
 print_board(board, ROW, COL);
}

menu()
{
 printf("********************************\n");
 printf("****   0--Exit   1--play    ****\n");
 printf("********************************\n");
}

int main()
{
 int input = 0;
 do
 {
  menu();
  printf("Please select:");
  scanf("%d", &input);
  switch (input)
  {
  case 0:
   break;
  case 1:
   test(); break;
  default :
   printf("Input error!");
  }
 } while (input);
 getchar();
 return 0;
}

运行界面:


      这样,简易版的三子棋游戏就完成了!