一个简单的三子棋游戏(c语言实现)

题目是:在一个3*3大小的矩阵中下棋一方有连续三个子便获胜

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h> 
  
         
char arr[3][3] = { 0 };            //直接定义外部变量所有的函数可以直接使用    因为考虑到棋盘大小是固定的
int size = 9;                   //棋盘大小固定  每下一个子都会使可以下子的容量-1
void chessboard()                                    //打印棋盘
{
 int i = 0, j = 0;
 printf("   |   |   \n");
 for (i = 0; i < 3; i++)
 {
  printf("_%c_|_%c_|_%c_\n", arr[i][0], arr[i][1], arr[i][2]);   //棋盘对应位置下棋
  if (i < 2)
   printf("   |   |   \n");
 }
}
void player()                                       //玩家下棋
{
 int m = 0, n = 0;
 printf("player(@):");              //输入的是对应的坐标    
 scanf_s("%d%d", &m, &n);          //玩家输入的坐标必须在范围内并且不能是被下过的地方
 if (m<1 || m>3 || n<1 || n>3 || arr[m - 1][n - 1] != ‘ ‘)
 {
  printf("this place can not play!\n");    //如果不符合要求则继续调用这个函数
  player();
 }
 else
 {
  arr[m - 1][n - 1] = ‘@‘;   //将棋子放入相应的内容 棋盘容量-1
  size--;
 }
}

void computer()                                     //电脑下棋
{
 printf("computer(#):\n");      
  int m = 0, n = 0;
  srand(time(NULL));          //电脑的坐标是随机产生的   以时间为种子
  m = rand() % 3;            //对3取余产生0-2的随机数赋给数组下标
  n = rand() % 3;
  while (arr[m][n] != ‘ ‘)     //如果产生的坐标不符合要求则循环产生      (效率比较低)
  {
   m = rand() % 3;
   n = rand() % 3;
  }
  arr[m][n] = ‘#‘;               //操作后容量-1
  size--;            
}
 
int winner()                                        //判断获胜者
{                            //虽然代码多但是效率高  本来想采用函数比较考虑到效率太低就放弃了
 if ((arr[0][0] == arr[0][1] && arr[0][1] == arr[0][2] && arr[0][2] == ‘@‘) ||
  (arr[1][0] == arr[1][1] && arr[1][1] == arr[1][2] && arr[1][2] == ‘@‘) ||
  (arr[2][0] == arr[2][1] && arr[2][1] == arr[2][2] && arr[2][2] == ‘@‘) ||
  (arr[0][0] == arr[1][0] && arr[1][0] == arr[2][0] && arr[2][0] == ‘@‘) ||
  (arr[0][1] == arr[1][1] && arr[1][1] == arr[2][1] && arr[2][1] == ‘@‘) ||
  (arr[0][2] == arr[1][2] && arr[1][2] == arr[2][2] && arr[2][2] == ‘@‘) ||
  (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[2][2] == ‘@‘) ||
  (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[2][0] == ‘@‘))
  return 1;                        //玩家获胜
 else if ((arr[0][0] == arr[0][1] && arr[0][1] == arr[0][2] && arr[0][2] == ‘#‘) ||
  (arr[1][0] == arr[1][1] && arr[1][1] == arr[1][2] && arr[1][2] == ‘#‘) ||
  (arr[2][0] == arr[2][1] && arr[2][1] == arr[2][2] && arr[2][2] == ‘#‘) ||
  (arr[0][0] == arr[1][0] && arr[1][0] == arr[2][0] && arr[2][0] == ‘#‘) ||
  (arr[0][1] == arr[1][1] && arr[1][1] == arr[2][1] && arr[2][1] == ‘#‘) ||
  (arr[0][2] == arr[1][2] && arr[1][2] == arr[2][2] && arr[2][2] == ‘#‘) ||
  (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[2][2] == ‘#‘) ||
  (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[2][0] == ‘#‘))
  return 0;                     //电脑获胜
 else if (size == 0)
  return -1;                     //平局
 else
  return 2;           //只是为了消除编译的警告并无实际意义
}

int main()
{
 int i = 0, j = 0;    //将数组初始化为空格
 for (i = 0; i < 3; i++)
 {
  for (j = 0; j < 3; j++)
  {
   arr[i][j] = ‘ ‘;
  }
 }
 while (1)        //循环对弈直到一方获胜或者平局
 {
  chessboard();          //循环每次开始都打印棋盘
  if (winner() == -1 || winner() == 0 || winner() == 1)   
  {
   break;
  }
  player();        //每下一个子后都打印棋盘 然后就判断又没有人获胜
  chessboard();
  if (winner() == -1 || winner() == 0 || winner() == 1)
  {
   break;
  }
  computer(); 
 }
 if (winner() == 1)
 {
  printf("player win!\n");
 }
 else if (winner() == 0)
 {
  printf("computer win!\n");
 }
 else
 {
  printf("no one win!\n");
 }
 system("pause");
 return 0;
}
 当然这个程序还有很多改进的地方,这个只是一个简单的雏形。
时间: 2024-10-18 16:08:53

一个简单的三子棋游戏(c语言实现)的相关文章

简单的三子棋游戏

简单的三子棋游戏,我能力有限把电脑玩家的走子写的比较简单. #include<stdio.h> void qipan() { printf("_ _|_ _|_ _\n"); printf("_ _|_ _|_ _\n"); printf("_ _|_ _|_ _\n"); } void player_and_pcdo() { int i = 0, j = 0; static char a[3][3] = { ' ', ' ', '

用C写一个简单的推箱子游戏(一)

我现在在读大二,我们有一门课程叫<操作系统>,课程考查要求我们可以写一段程序或者写Windows.iOS.Mac的发展历程.后面我结合网上的资料参考,就想用自己之前简单学过的C写一关的推箱子小程序. 这一程序主要用到了C语言中的二维数组,头文件#include<conio.h>(因为要调用getch()函数以记录输入内容),switch函数等. 一.     功能概述 a)   游戏规则概述 玩家通过键盘输入W.S.A.D四键或者“↑”.“↓”.“←”.“→”四个方向键推动箱子,而

一个简单的抽奖转盘游戏

在一个项目中要做一个游戏,在这个过程中做了一个简单的9宫格抽奖游戏.大体思路是,点击开始按钮,游戏开始.由一个逐步递增参数 drawStep 来控制格子的背景颜色的改变,游戏停止的位置参数 stopPosition 由随机函数生成,以此来控制格子停止的位置.游戏转动一圈是8个格子,5圈就是40.easeTime参数模拟格子转动的缓步启动和缓步停止. <!doctype html> <html> <head> <meta charset="gbk"

C++编写的一个简单的猜数字游戏源码

将开发过程比较重要的一些内容段做个记录,下面内容段是关于C++编写的一个简单的猜数字游戏的内容. #include <iostream> #include <string> #include <cstdlib> #include <cctype> #include <ctime> #include <conio.h> using namespace std; int main () { int wins = 0; int losses

用MFC完成一个简单的猜数字游戏: 输入的四位数中,位置和数字都正确为A,数字相同而位置不同的为B。

最近学习了MFC一些比较基础的知识,所以打算通过做一个简单的数字游戏来理解MFC的流程并进一步熟悉其操作. 在这里,我做了一个猜数字的小游戏.第一步当然是设计主界面,先给大家展示一下游戏界面: 主界面: 从这个主界面可以看到,它包含标题,菜单栏,工具栏. 标题是给人一个认识,这是什么游戏,标题设置为:“猜数游戏”: 而菜单栏和工具栏才是游戏的核心,它要保证能够完成游戏的基本功能. 菜单栏和工具栏是对应的,包含了”start“,"help","restart"这三个菜

使用Unity3D的设计思想实现一个简单的C#赛车游戏场景

最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现.原本在C#中很方便地就可以完成的一个小场景,使用Unity3D的设计思想(即一切游戏对象皆空对象,拖拽组件才使其具有了活力)来实现却需要花费大量时间与精力,究竟它神奇在什么地方?本文通过实现这个小例子来看看. 一.空对象与组件 在Unity3D最常见的就是GameObject,而一个GameObject被实例化后确啥特性与行为都没有,只有当我们往其中拖拽了一

C语言编程 三子棋 游戏

#include<stdio.h> #include<stdlib.h> #include<windows.h> #define amu 3 void menu()//菜单界面 { printf("***********************************************\n"); printf("********** 欢 迎 来 到 三 子 棋 游 戏 *********\n"); printf("

用C语言实现三子棋游戏

1.头文件部分#ifndef _THREE_CHESSH#define _THREE_CHESSH #include<stdio.h>#include<windows.h>#include<string.h>#include<time.h>#pragma warning(disable:4996) #define ROW 3#define COL 3 void ShowUI();void Game();void ComputerMove(char board

做一个简单的贪吃蛇游戏

这是一个贪吃蛇游戏,你可以忽略他的外表,好了,先上html代码 <style type="text/css"> * {margin: 0;padding: 0;} #container {width: 1000px;height: 550px;border: 1px solid #000;margin: 0 auto;} #container #ground {width: 1000px;height: 500px;background-color:#eeeeee;posi