2 wodeqingtian1234 wodeqingtian1234 于 2016.03.27 21:16 提问

写一个三子棋,棋盘游戏,用c语言

输出初始棋盘,分为电脑和玩家输入,输入一次打印一次棋盘,判断谁先三点一线完成谁赢最后输出结果

3个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.27 22:06
已采纳
 #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;
}
CSDNXIAON
CSDNXIAON   2016.03.30 11:27

一个C语言写的2048游戏
C语言写游戏之一:试着写一个游戏引擎
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

lx624909677
lx624909677   Ds   Rxr 2016.03.27 23:12
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
【c语言】棋盘游戏--三子棋
一、问题概述 大家都玩过棋盘游戏吧,像五子棋一样,玩家或者是电脑一人下一次,当玩家或者是电脑的某一方先将各自的五个棋子下成一条线时,谁就赢,棋盘游戏就会结束。                             当然,我今天要介绍的是三子棋,和五子棋的原理是一样的,当玩家或者是电脑的某一方先将各自的三个棋子下成一条线时,谁就赢,棋盘游戏就会结束。 下面我们用如下棋盘模拟一下电脑上的棋盘
C语言实现三子棋游戏
先直接上代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> //2.实现三子棋游戏。 #include<Windows.h> //Sleep() RAND_MAX 的头文件void menu() //打印菜单 { printf("******************
用C语言写三子棋游戏
#include #include enum G { EXIT, PLAY }; void menu() { printf("##############1.开始游戏##############\n"); printf("##############0.退出游戏##############\n"); } void fill(char a[3][3]) { int ran1 = 0
用C语言写一个三子棋游戏
1.三子棋规则:在九宫格棋盘上,只要将自己的三个棋子走成一条线(横、竖、对角线),对方就算输了。2.三子棋过程程序过程(三部分:头文件,源文件函数部分,源文件游戏规则部分):&amp;gt;先写一个头文件:#ifndef _GAME_H_ #define _GAME_H_ #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;Windows.h&amp;gt; #include&amp;lt;stdli...
C语言编写三子棋V1.0
c语言编写三子棋 text.c #define _CRT_SECURE_NO_WARNINGS 1 #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;time.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #include&quot;game.h&quot; void game() { int ret = 0; char board[ROWS][C...
三子棋游戏(c语言实现)
一说到写个三子棋游戏,首先我们得想到有个棋盘初始化和棋盘打印函数。 接下来,玩游戏阶段,人玩游戏,电脑玩游戏,各写一个函数,每次下完棋都得判断有没有人赢了游戏,若有人赢了,游戏退出,否则继续游戏。在这过程中,还有可能棋盘满 了,所以写个判断棋盘是否满的的函数,棋盘满了,程序结束,没人赢,此时就平局。 当然了,还有一些辅助函数,比如game函数,print_manu函数,只是起到封装的作用,也
用C写一个简单的三子棋游戏
基本思路: 打印菜单——选择游戏——打印初始棋盘(棋盘用数组实现)——玩家下棋(输入坐标)——电脑随机下棋(利用rand(srand)的库函数)——判断(棋盘格子是否为空,,棋盘是否满了,判断游戏结果)——结束游戏。 代码实现: game.h #define _CRT_SECURE_NO_WARNINGS 1 #ifndef GAME_...
【C语言】 棋盘游戏
#include #define COL 3  #define ROW 3 void init_board(int arr[COL][ROW]) { int i = 0; int j = 0; for (i = 0; i < COL; i++) { for (j = 0; j < ROW; j++) { arr[i][j] = ' '; } } } void prin
写一个三子棋小游戏的感悟
在写之前,我已经把函数的结构设计出来,主要由以下几个函数实现;1:初始化棋框2:玩家下棋3:电脑下棋4:判断胜负5:更新棋框6:主函数在写的过程中碰到了不能将玩家下的位置放入棋框中,原因是在函数定义过程中没有将二维数组引入,导致棋框更新不正确,在函数中引用二维数组时,因为c语言编译系统不检查第一维的大小,只要第二维大小相同,形参数组第一维可以与实参不同,因此在函数定义时只需要写int qk(arr
用C语言编写三子棋的具体分析
在做这个三子棋时的时候首先我们该细心分析好我们应该做的每一部然后再用对应的函数实现。 首先下三子棋应该需要这么几步: 1.在屏幕打印出一个棋盘; 2.人移动棋子; 3.检查输赢; 4.电脑移动棋子; 5.检查输赢; 下一盘三子棋总共需要这么几步 ,让我们一步一步来实现。 首先让我们写出大框架: void play_g() { char arr[ROW][LINE]; init