三子棋 小游戏

来源:互联网 发布:零成本营销软件 编辑:程序博客网 时间:2024/06/05 20:01

对c语言有了初步的认识,就尝试写了小游戏,三子棋,个人觉得三子棋的算法还有待提高,电脑落棋靠随机值,但没有更智能的堵并且下直线,算法方便还请多多指教!

现在上代码:

game.h
#ifndef _GAME_H_
#define _GAME_H_
#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#define ROW 3
#define COL 3
void InitBoard(char board[ROW][COL], int row, int col);
void PrintBoard(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);
char CheckWin(char board[ROW][COL], int row, int col);
int  Full(char board[ROW][COL], int row, int col);
#endif  //_GAME_H_
game.c
#define  _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
int m = 0;
int n = 0;
void InitBoard(char board[ROW][COL], int row, int col)
{
 memset(board, ' ', col*row*sizeof(char));
}
void PrintBoard(char board[ROW][COL], int row, int col)
{
 int i = 0;
 for (i = 0; i < ROW; i++)
 {
  printf(" %c | %c | %c ", board[i][0], board[i][1], board[i][2]);
  printf("\n");
  if (i != 2)
   printf("---|---|---\n");
 }
}
void PlayerMove(char board[ROW][COL], int row, int col)
{
 printf("请输入坐标:>\n");
 scanf("%d%d", &m, &n);
 m--;
 n--;
 while (1)                //保证玩家输入,输入错误仍可继续输入,直到输入正确为止
 {
  if ((m >= 0) && (m <= 2) && (n <= 2) && (n >= 0))   //判断输入是否越界
  {
   if (board[m][n] == ' ')                        //判断位置是否已被占用
   {
    board[m][n] = 'X';
    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] = 'O';
   break;
  }
 }
}
int  Full(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 1;
  }
 }
 return 0;
}
char CheckWin(char board[ROW][COL], 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]) && board[i][0] != ' ')
   return board[i][0];
 }
 for (i = 0; i < col; i++)
 {
  if ((board[0][i] == board[1][i]) && (board[1][i] == board[2][i]) && board[0][i] != ' ')
   return board[0][i];
 }
 if ((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]) && board[0][0] != ' ')
  return board[0][0];
 if ((board[0][2] == board[1][1]) && (board[1][1] == board[2][0]) && board[0][2] != ' ')
  return board[0][2];
 return ' '; 
}
test.c
#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include "game.h"
int main()
{
 char board[ROW][COL];
 char ret = 0;
 int a = 0;
 InitBoard(board, ROW, COL);
 PrintBoard(board, ROW, COL);
 while (1)
 {
  printf("玩家走:>");
  printf("\n");
  PlayerMove(board, ROW, COL);
  PrintBoard(board, ROW, COL);
      if (Full(board, ROW, COL) == 0)
  {
   printf("平局\n");
   break;
  }
  if (CheckWin(board, ROW, COL) != ' ')
  {
   printf("电脑赢\n");
   break;
  }
  printf("电脑走:>");
  printf("\n");
  ComputerMove(board, ROW, COL);
  PrintBoard(board, ROW, COL);
  if (Full(board, ROW, COL) == 0)
  {
   printf("平局\n");
   break;
  }
  if (CheckWin(board, ROW, COL) != ' ')
  {
   printf("电脑赢\n");
   break;
  }
 }
 system("pause");
 return 0;
}

原创粉丝点击