C语言实现三子棋小游戏(vs2013多文件)

本文通过实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下

基本思路:

1.创建一个游戏选择面板.

2.创建并初始化棋盘。

3.玩家落子并判定,电脑落子并判定。

4.判定结果 ,游戏结束!

代码如下:

头文件:

#pragma once
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include <time.h>
#pragma warning(disable:4996) 

extern void Game();//游戏代码需要定义调用的函数

#define ROW 3//FOW、FOL代表三子棋边界的长和宽
#define COL 3
#define INIT  ' ' //INIT为空格的宏定义
#define WHITE 'X' //X在三字棋代表Player
#define BLACK 'O' //O在三字棋代表Computer
#define DRAW  'D' //DRAW代表平局
#define NEXT  'N' //NEXT代表继续 //MineClearence

各类函数:

void InitBoard(char board[][COL], int row, int col)//棋盘初始化
{
 for (int i = 0; i < row; i++){
  for (int j = 0; j < col; j++){
   board[i][j] = INIT;
  }
 }
}
static void ShowBoard(char board[][COL], int row, int col)//显示棋盘
{
 system("cls");
 printf(" ");
 for (int i = 0; i < col; i++){
  printf("%4d", i + 1);
 }
 printf("\n--------------\n");
 for (int i = 0; i < row; i++){
  printf("%-2d", i + 1); //2
  for (int j = 0; j < col; j++){
   printf("| %c ", board[i][j]);
  }
  printf("\n--------------\n");
 }
}
static char IsEnd(char board[][COL], int row, int col)//最终结果
{
 for (int i = 0; i < row; i++){
  if (board[i][0] == board[i][1] &&
   board[i][1] == board[i][2] &&
   board[i][0] != INIT){
   return board[i][0];
  }
 }
 for (int j = 0; j < COL; j++){
  if (board[0][j] == board[1][j] &&
   board[1][j] == board[2][j] &&
   board[0][j] != INIT){
   return board[0][j];
  }
 }
 if (board[0][0] == board[1][1] &&
  board[1][1] == board[2][2] &&
  board[1][1] != INIT){
  return board[1][1]; }
 if (board[0][2] == board[1][1] &&
  board[1][1] == board[2][0] &&
  board[1][1] != INIT){
  return board[1][1]; }
 for (int i = 0; i < row; i++){
  for (int j = 0; j < col; j++){
   if (board[i][j] == INIT){
    return NEXT;
   }
  }
 }
 return DRAW;
}
static void PlayerMove(char board[][COL], int row, int col)//玩家
{ int x = 0; int y = 0;
 while (1){
 printf("Please Enter Postion<x,y># ");
 scanf("%d %d", &x, &y);
 if (x < 1 || y < 1 || x > 3 || y > 3){
  printf("Enter Postion Error!\n");
  continue;
 }
 if (board[x - 1][y - 1] == INIT){
  board[x - 1][y - 1] = WHITE;
  break;
 }
 else{
  printf("Postion Is Not Empty!\n");
 }
 }
}
static void ComputerMove(char board[][COL], int row, int col)//电脑
{
 while (1){
  int x = rand() % row;
  int y = rand() % col;
  if (board[x][y] == INIT){
   board[x][y] = BLACK;
   break;
  }
 }
}
void Game()
{
 char board[ROW][COL];
 InitBoard(board, ROW, COL);
 srand((unsigned long)time(NULL));
 char result = 0;
 while (1){
  ShowBoard(board, ROW,COL);
  PlayerMove(board, ROW,COL);
  result = IsEnd(board, ROW, COL);
  if (result != NEXT){
   break;
  }
  ShowBoard(board, ROW, COL);
  ComputerMove(board,ROW, COL);
  result = IsEnd(board, ROW,COL);
  if (result != NEXT){
   break;
  }
 }
  ShowBoard(board, ROW,COL);
  switch (result){
  case WHITE:
   printf("You Win!\n");
   break;
  case BLACK:
   printf("You Lose!\n");
   break;
  case DRAW:
    printf("You == Computer!\n");
    break;
  default:
     printf("BUG!\n");
     break;
  }
} 

游戏选择面板(主函数)

#include "game.h"
static void Menu()
{
 printf("|-------------  开始游戏 -------------|\n");
 printf("+-------------  1. Play  -------------+\n");
 printf("+-------------  0. Exit  -------------+\n");
}

int main()
{
 int select = 0;
 int quit = 0;
 while (!quit){
 Menu();
 printf("Please Select#");
 scanf("%d",&select);

 switch (select){
 case 1:
  Game();
  break;
 case 0:
  quit = 1;
  break;
 default:
  printf("Enter Error, Try Again!\n");
  break;
  }

 }
 printf("bye!\n");
 system("pause");
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解C语言之缓冲区溢出

    一.缓冲区溢出原理 栈帧结构的引入为高级语言中实现函数或过程调用提供直接的硬件支持,但由于将函数返回地址这样的重要数据保存在程序员可见的堆栈中,因此也给系统安全带来隐患.若将函数返回地址修改为指向一段精心安排的恶意代码,则可达到危害系统安全的目的.此外,堆栈的正确恢复依赖于压栈的EBP值的正确性,但EBP域邻近局部变量,若编程中有意无意地通过局部变量的地址偏移窜改EBP值,则程序的行为将变得非常危险. 由于C/C++语言没有数组越界检查机制,当向局部数组缓冲区里写入的数据超过为其分配的大小时,就

  • 使用C语言操作树莓派GPIO的详细步骤

    第一步安装GPIO库. cd /tmp wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb 地址链接4B的 http://wiringpi.com/wiringpi-updated-to-2-52-for-the-raspberry-pi-4b/ 第二步打开GPIO设置 打开GPIO,学习嘛,全打开得了. 保存重启. 第三步找一个GPIO的图 然后找一张树莓派

  • C语言中实现协程案例

    协程是一种用户空间的非抢占式线程,主要用来解决等待大量的IO操作的问题. 协程vs线程 对比使用多线程来解决IO阻塞任务,使用协程的好处是不用加锁,访问共享的数据不用进行同步操作.这里需要说明的一点是,使用协程之所以不需要加锁不是因为所有的协程只在一个线程中运行,而是因为协程的非抢占式的特点.也就是说,使用协程的话,在没主动交出CPU之前都是不会被突然切换到其它协程上的.而线程是抢占式的,使用多线程你是不能确定你的线程什么时候被操作系统调度,什么时候被切换,因此需要用锁到实现一种"原子操作&qu

  • C语言实现三子棋游戏附注释

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 概述 三子棋棋盘为九宫格形式,玩家和电脑分别轮流落子,若有一方有三个棋连在一起的情况则胜. 实现过程 1.玩家交互菜单创建 2.棋盘创建与初始化 3.玩家与电脑落子 4.判定胜负关系 多文件实现 头文件 game.h #ifndef __GAME_H__ #define __GAME_H__ #include <stdio.h> #include <time.h> #include <stdlib.

  • C语言指针详解

    前言:复杂类型说明     要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧: int p; //这是一个普通的整型变量   int *p; //首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所

  • C语言char s[]和char* s的区别

    C语言指针可以代替数组使用 1.数组本质 数组是多个元素的集合,在内存中分布在地址连续的单元中,因此可以通过其下标访问数组的不同数组. 例如: 下面展示一些 char s[3] = "0x1"; printf("s2字符串:\n"); printf("%c\n", s[0]); printf("%c\n", s[1]); printf("%c\n", s[2]); 2.指针 指针也是一种变量,只不过它的内存

  • C语言指针数组案例详解

    指针与数组是 C 语言中很重要的两个概念,它们之间有着密切的关系,利用这种 关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之 间的联系及在编程中的应用. 1.指针与数组的关系 当一个指针变量被初始化成数组名时,就说该指针变量指向了数组.如: char str[20], *ptr; ptr=str; ptr 被置为数组 str 的第一个元素的地址,因为数组名就是该数组的首地址, 也是数组第一个元素的地址.此时可以认为指针 ptr 就是数组 str(反之不成立), 这样原来对数

  • C语言实现三子棋小游戏(vs2013多文件)

    本文通过实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 基本思路: 1.创建一个游戏选择面板. 2.创建并初始化棋盘. 3.玩家落子并判定,电脑落子并判定. 4.判定结果 ,游戏结束! 代码如下: 头文件: #pragma once #include<stdio.h> #include<windows.h> #include<stdlib.h> #include <time.h> #pragma warning(disable:4

  • C语言实现三子棋小游戏(vs2013多文件)

    本文通过实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 基本思路: 1.创建一个游戏选择面板. 2.创建并初始化棋盘. 3.玩家落子并判定,电脑落子并判定. 4.判定结果 ,游戏结束! 代码如下: 头文件: #pragma once #include<stdio.h> #include<windows.h> #include<stdlib.h> #include <time.h> #pragma warning(disable:4

  • C语言实现三子棋小游戏详解

    在用c语言实现三子棋小游戏之前,我们应当了解三子棋的游戏规则:在九宫格棋盘上,哪一方三个棋子连成一线(一行或一列或对角线)即判定哪一方胜利. 以下为源代码: 1.首先打印出菜单. void menu() { printf("**********************************\n"); printf("**********************************\n"); printf("***** 0.play *********

  • 用C语言实现三子棋小游戏

    本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 1. 规则介绍 三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋等.将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了.但是,有很多时候会出现和棋的情况. 2. 编写思路 2.1 选择界面的编写 提供选择界面(设计者可根据自己的喜好设定棋盘的大小:输入何种数字或者符号开始或者退出游戏也可由设计者自己确定数字) static void Menu() { pri

  • C语言版三子棋小游戏

    本文实例为大家分享了C语言版三子棋小游戏的具体代码,供大家参考,具体内容如下 ①游戏效果 有一个3*3的棋盘 每次下棋后(电脑和玩家),棋盘会更新数据 会有菜单提示相关命令进行相关操作 下棋方法是输入坐标 每一局游戏结束后,会询问是否继续. ②主函数逻辑搭建 任何一个项目的实现,最重要的就是逻辑结构搭建,而各个功能的实现就是采取函数(模块化)进行细分. 所以我们需要搭建逻辑,那么逻辑结构是啥呢? 首先会跳出提示菜单,内容为 0退出游戏,1开始/继续游戏,其他键提示错误,并重新输入 按0后提示 "

  • 适合初学者练习的C语言实现三子棋小游戏

    目录 一.写代码前明确下棋时的步骤与顺序 二 根据初步的主函数完成想要的代码 1.写一个函数来初始化棋盘 2.打印棋盘 3.玩家落子 4.电脑落子 5.判断胜负 三.三子棋实现代码 用简单的C语言来实现小时候玩的三子棋游戏,下面是人机对战,当然这个代码的电脑对手是人工智障而不是人工智能 一.写代码前明确下棋时的步骤与顺序 1.创建一个3*3的棋盘. 2.将上面创建的棋盘中每个格初始化成' '状态. 3.打印出初始化完成的棋盘 4.玩家落子 5.电脑落子 6.判断胜负 写代码之前梳理好大概的思路,

  • C语言实现三子棋小游戏全程详解

    目录 前言 思想提升及重要代码片段 三子棋代码 前言 授人以鱼不如授人以渔,这篇文章重点从思想上的角度来写,助你举一反三,在写代码时不再害怕,真的很想对你有帮助呀,代码放在文章最后啦 思想提升及重要代码片段 为什么要拆成三个文件写:1.便于复用代码.重复的功能只要写一遍就可以了,下次要用在其它程序上时只要更改很小的部分或者可以不用更改.2.便于多人协作.在设计软件之初就可以很清楚地分配各个开发部门的任务.模块的编写者本身只要关注他所写的东西,清楚这一部分的功能,留出接口就可以了.另外,对于整个工

  • 使用C语言实现三子棋小游戏

    目录 1.实现原理 2.实现模块 3.实现逻辑 4.实现结果 本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 1.实现原理 采用二位数组保存棋盘信息,棋盘上面的任何一个位置,里头可以放三个信息: 1.空2.用户落子3.电脑落子 下三子棋就是在二维数组种找对应的空位置,进行落子,落完之后立即就要判断落子位置是否有三字连珠,从而判断谁数输谁赢.每走一次棋会有四种情况: *用户1赢*用户2赢*平局(棋盘被沾满)**没有出结果 继续下棋 2.实现模块 文件名      

  • C语言实现三子棋小游戏

    在这里我们要写出一个三子棋的小游戏,能够实现所需要的三字连珠的功能,并且可以使得游戏让玩家进行选择是否继续的功能. 代码: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<time.h> #define ROW 3 #define COL 3 void init_board(char arr[ROW][COL]) { int i=0; int j=0; for

  • C语言设计三子棋小游戏

    三子棋想必大家都不陌生,随便画个井字便可以游戏,如下图 接下来我将介绍如何用C语言实现简易的三字棋游戏 先确定好文件布局 进入程序首先我们要设计一个菜单,如下图 这个用很容易实现 void menu() { printf("********************************\n"); printf("******** 1.game **********\n"); printf("******** 0.exit **********\n&quo

随机推荐