多子棋(三子棋plus版本)

目录

前言:

一、n子棋的思路。

二、代码实现

1.棋盘初始化和打印

2.游戏主体

1.玩家下棋和电脑下棋

3.判断游戏胜利:

三.源码文件

前言:

为了便于读者理解,代码将分块实现,最后会合并在一起,待会也会给出。

一、n子棋的思路。

1.打印棋盘并且对棋盘进行初始化

2.游戏主体,大致分为玩家下棋和电脑下棋

3.判断胜利一方

二、代码实现

1.棋盘初始化和打印

1.棋盘初始化

#include 
#define ROW 100
#define COL 100
int main()
{
    int n = 0;
    ​​​​​​​printf("你想要玩几子棋,请输入:");
    scanf("%d", &n);                    //输入想要游玩的n子棋
    char arr[ROW][COL] = { 0 };         //创建二维数组用于存储棋盘的元素
    int i = 0;
    int j = 0;
    for (i = 0; i < n; i++)             //行
    {
        for (j = 0; j < n; j++)         //列
        {
            arr[i][j] = ' ';            //初始化为空格
        }
    }                

2.棋盘的打印

for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			printf("%c ", arr[i][j]);   //为了达到九宫格的效果,先打印棋盘元素然后打印|,可以将行元素相互隔离,下面会有代码结果对比
			if (j < n - 1)
				printf("|");		//这一步是为了让棋盘更美观,
		}
		if (i < n - 1)					
		{
			printf("\n");
			for (j = 0; j < n; j++)
			{
				printf("--");				  //打印__下划线,将棋盘分割开
				if (j < n - 1)
					printf("|");
			}
		}
		printf("\n");
	}

如果没有if判断j

多子棋(三子棋plus版本)_第1张图片

 加上j

多子棋(三子棋plus版本)_第2张图片

强迫症的同学会比较舒服

2.游戏主体

1.玩家下棋和电脑下棋

首先玩家和电脑下过棋之后该坐标就会被占用,不能把这个坐标覆盖住

下面是玩家下棋代码 

{
	printf("请输入坐标:");
	int x = 1;
	int y = 1;
	while (1)				//循环是用来判断输入坐标是否被占用,被占用就需要重新输入
	{
		scanf("%d %d", &x, &y);    //玩家输入的坐标
		if (arr[x - 1][y - 1] == ' ')  //减一是因为数组下标是从零开始的,我们输入坐标肯定是从一开始的
		{
			arr[x - 1][y - 1] = '*';
			break;		//如果没被占用就直接跳出
		}
		else
		{
			printf("坐标被占用,请重新输入:");
		}
	}
}

电脑下棋代码

如何实现电脑自动下棋:我们可以让电脑随机生成坐标(可以使用时间戳和随机数函数生成坐标)

下面是随机数生成示例


#include 
#include         srand使用需要的头文件
#include           time函数使用需要的头文件
int main()
{
	int n = 0;
	int a = 0;
	srand((unsigned int)time(NULL));  //rand函数使用之前需要调用srand函数
	
	while (a != 10)
	{
		n = rand() % 100 + 1;     rand是一个随机数生成器
		printf("%d\n", n);
		a++;
	}
	return 0;
}

运行结果如下

多子棋(三子棋plus版本)_第3张图片


电脑下棋代码:

{
	int x = 0;
	int y = 0;
	while (1)
	{
		x = rand() % n;			//电脑随机生成坐标
		y = rand() % n;
			if (arr[x][y] == ' ')    //判断是否被占用
			{
				arr[x][y] = '#';
				break;
			}				//电脑生成的坐标不需要被提示,如果被占用就重新生成一个即可
	}
}

下面是玩家和电脑下棋效果图:

多子棋(三子棋plus版本)_第4张图片

3.判断游戏胜利:

思路:判断游戏会出现三种结果:玩家胜利,电脑胜利,平局

胜利判断:行或列相等,或者对角线相等(坐标全为空也不行)

平局:当所有坐标全部被占用,并且没有出现一方胜利即为平局

char Judge(int n, char arr[ROW][COL])
{
	int i = 0;    
	int j = 0;
	int count = 0;
	for (i = 0; i < n; i++)		行相等的判断
	{
		j = 0;			//i是行,j是列
		for (j = 0; j < n-1; j++)			//j
                                
                                
  • 好代码是廉价的代码 dcj3sjt126com 程序员读书
      长久以来我一直主张:好代码是廉价的代码。 当我跟做开发的同事说出这话时,他们的第一反应是一种惊愕,然后是将近一个星期的嘲笑,把它当作一个笑话来讲。 当他们走近看我的表情、知道我是认真的时,才收敛一点。 当最初的惊愕消退后,他们会用一些这样的话来反驳: “好代码不廉价,好代码是采用经过数十年计算机科学研究和积累得出的最佳实践设计模式和方法论建立起来的精心制作的程序代码。” 我只
  • Android网络请求库——android-async-http dcj3sjt126com android
    在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Instagram和Pinterest的Android版就是用的这个网络请求库。这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通
  • ORACLE 复习笔记之SQL语句的优化 eksliang SQL优化Oracle sql语句优化SQL语句的优化
    转载请出自出处:http://eksliang.iteye.com/blog/2097999   SQL语句的优化总结如下   sql语句的优化可以按照如下六个步骤进行: 合理使用索引 避免或者简化排序 消除对大表的扫描 避免复杂的通配符匹配 调整子查询的性能 EXISTS和IN运算符 下面我就按照上面这六个步骤分别进行总结:
  • 浅析:Android 嵌套滑动机制(NestedScrolling) gg163 android移动开发滑动机制嵌套
    谷歌在发布安卓 Lollipop版本之后,为了更好的用户体验,Google为Android的滑动机制提供了NestedScrolling特性 NestedScrolling的特性可以体现在哪里呢?<!--[if !supportLineBreakNewLine]--><!--[endif]--> 比如你使用了Toolbar,下面一个ScrollView,向上滚
  • 使用hovertree菜单作为后台导航 hvt JavaScriptjquery.nethovertreeasp.net
      hovertree是一个jquery菜单插件,官方网址:http://keleyi.com/jq/hovertree/ ,可以登录该网址体验效果。 0.1.3版本:http://keleyi.com/jq/hovertree/demo/demo.0.1.3.htm hovertree插件包含文件: http://keleyi.com/jq/hovertree/css
  • SVG 教程 (二)矩形 天梯梦 svg
    SVG <rect> SVG Shapes SVG有一些预定义的形状元素,可被开发者使用和操作: 矩形 <rect> 圆形 <circle> 椭圆 <ellipse> 线 <line> 折线 <polyline> 多边形 <polygon> 路径 <path>
  • 一个简单的队列 luyulong java数据结构队列
    public class MyQueue { private long[] arr; private int front; private int end; // 有效数据的大小 private int elements; public MyQueue() { arr = new long[10]; elements = 0; front
  • 基础数据结构和算法九:Binary Search Tree sunwinner Algorithm
      A binary search tree (BST) is a binary tree where each node has a Comparable key (and an associated value) and satisfies the restriction that the key in any node is larger than the keys in all
  • 项目出现的一些问题和体会 Steven-Walker DAOWebservlet
         第一篇博客不知道要写点什么,就先来点近阶段的感悟吧。     这几天学了servlet和数据库等知识,就参照老方的视频写了一个简单的增删改查的,完成了最简单的一些功能,使用了三层架构。 dao层完成的是对数据库具体的功能实现,service层调用了dao层的实现方法,具体对servlet提供支持。  &
  • 高手问答:Java老A带你全面提升Java单兵作战能力! ITeye管理员 java
    本期特邀《Java特种兵》作者:谢宇,CSDN论坛ID: xieyuooo 针对JAVA问题给予大家解答,欢迎网友积极提问,与专家一起讨论! 作者简介: 淘宝网资深Java工程师,CSDN超人气博主,人称“胖哥”。 CSDN博客地址: http://blog.csdn.net/xieyuooo 作者在进入大学前是一个不折不扣的计算机白痴,曾经被人笑话过不懂鼠标是什么,