文档章节

java语言,c语言,五子棋的实现(键盘输入坐标)。

奔跑的码农
 奔跑的码农
发布于 2016/05/15 21:40
字数 1514
阅读 392
收藏 8
点赞 2
评论 0

实现思路:

1.初始化一个棋盘并打印,用一个二维数组储存棋盘。

2.下棋,就是输入一个坐标,将 数组对应的位置替换成棋子。

3.在下棋时判断棋子是否越界,判断是否重复。

4.判断输赢,遍历整个棋盘(还有别的实现方式)五个棋子连在一起为赢(其他规则没有考虑)。横着方向:

a b c d e f g h i j

假如这是棋盘的第一行。我们用四个个值 i,j,k。sum1首先i指示的是行数,i=1(注意数组下标为0)。j用来遍历这一行 .第一次j=1(数组下标为0)。指向a这里 令k=a。k向后遍历5个。如果每次与第一个棋子颜色相同就sum就加1.否则不加。遍历五个后如果sum0等于5.即有一方胜利。注意sum0弄成最内层的局部变量。其他方向思想相同 。


一下是java语言的实现(上课写的找不到了,这些不全只写到了下棋,c语言的全,两个代码几乎一样)。

package base;
import java.util.*;
class cheassBoard
{
	final static int SIZE=20;
	static char[][] board=new char[SIZE][SIZE];

	static{
		for(int i=0;i<SIZE;i++)
		{
			for(int j=0;j<SIZE;j++)
			{
				if(i==0&&j==0)
				{
					board[i][j]='┏';
				} 
				else if(i==0&&j==SIZE-1)
				{
					board[i][j]='┓';
				}
				else if(i==SIZE-1&&j==0)
				{
					board[i][j]='┗';	
				}
				else if(i==SIZE-1&&j==SIZE-1)
				{
					board[i][j]='┛';
				}
				else if(i==0)  //首行除了边角的元素 
				{
					board[i][j]='┳';
				}
				else if(i==SIZE-1)//底行 
				{
					board[i][j]='┻'; 
				} 
				else if(j==0) //第一列 
				{
					board[i][j]='┣';
				} 
				else if(j==SIZE-1) //最后列 
				{
					board[i][j]='┫';
				}
				else board[i][j]='╋';//中间的 
			}
		}
	}
	public void printBoard()
	{
		for(int i=0;i<SIZE;i++)
		{
			for(int j=0;j<SIZE;j++)
			{
				System.out.print(board[i][j]);
			}
			System.out.println();
		}
	}

	int[] play(int player,int x,int y)//下棋函数
	{	
		
		board[x][y]=(player==1 )? '●':'○';
		new cheassBoard().printBoard();
		player=(player==1)?2:1;
		int[]a={player,0};//数组有两个变量,第一个返回几号玩家,第二个返回0或者1;
		return a;
		
	}
}
public class Test {
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		cheassBoard cb=new cheassBoard();
		cb.printBoard();
		int play=1;int[] a={1,0};
		int judje;
		do
		{
			System.out.println("请选手"+play+"号下棋:中间空格隔开如(3 4)。");
			int x,y;
			x=sc.nextInt();y=sc.nextInt();
			a=cb.play(a[0], x, y);
			play=a[0];judje=a[1];
		}while(judje==0);
	}
}

strcmp(str1,str2) 设这两个字符串为str1,str2,若str1==str2,则返回零;若str1>str2,则返回正数;若str1<str2,则返回负数。注意导入头文件<string.h>。

一下是c语言的:

#include <stdio.h> //标准输入输出函数 
#include <windows.h> //屏幕幕光标操作等 
#include <string.h> //字符串操作函数 
//定义一个棋盘大小的宏 
#define SIZE 20 
//全局二维数组,表示棋盘 
char * board[SIZE][SIZE];

//初始化棋盘的函数
int playError(int x,int y);
void printBoard(void);  //
int play(int* player);
int playCorrect(int x,int y);
int verticalWin(int x,int y);
int horizonWin(int x,int y);
int positiveDiagonalWin(int x,int y);
int negativeDiagonalWin(int x,int y);
void initBoard()
{
	int i;
	for(i=0;i<SIZE;i++)
	{
		int j;
		for(j=0;j<30;j++)
		{
			//左上角
			if(i==0&&j==0)
			{
				board[i][j]="┏";
			} 
			else if(i==0&&j==SIZE-1)
			{
				board[i][j]="┓";
			}
			else if(i==SIZE-1&&j==0)
			{
				board[i][j]="┗";	
			}
			else if(i==SIZE-1&&j==SIZE-1)
			{
				board[i][j]="┛";
			}
			else if(i==0)  //首行除了边角的元素 
			{
				board[i][j]="┳";
			}
			else if(i==SIZE-1)//底行 
			{
				board[i][j]="┻"; 
			} 
			else if(j==0) //第一列 
			{
				board[i][j]="┣";
			} 
			else if(j==SIZE-1) //最后列 
			{
				board[i][j]="┫";
			}
			else board[i][j]="╋";//中间的 
		}
	}
} 
void printBoard()  //打印棋盘 
{
	system("cls");
	int i;
	for(i=0;i<SIZE;i++)
	{
		int j;
		for(j=0;j<SIZE;j++)
		{
			printf("%s",board[i][j]);
			
		}
		printf("\n"); 
	}
}
int play(int* player)//下棋 
{
	

	int x,y;
	do
	{
		printf("请输入玩家%d的坐标如(10,5):",*player); 
		scanf("%d,%d",&x,&y);
	}while(!playCorrect(x,y));
	board[x][y]=(*player==1?"●":"○");
	printBoard();	  
	if(win(x,y)==1)
	{
		printf("玩家%d获胜!\n",*player);
		return 1;
	} 	
	*player=(*player==1)?2:1;
	return 0;
}
int playCorrect(int x,int y)
{
	//判断越界 
	int noOverStep;
	noOverStep=(x<SIZE&&x>=0)&&(y<SIZE&&y>=0);
	 //判断重复
	 if(noOverStep==0)
	 {
 		printf("输入有误\n");	
 	 	return 0;
	  }
	 int Repeat;
	Repeat=(strcmp(board[x][y],"●")==0)||(strcmp(board[x][y],"○")==0);
	 //正确返回1
	 //错误返回0 
	 if(noOverStep&&!Repeat)
	{
		return 1; //输入正确返回1 
		
	}
	return 0;
}
//判断一方胜利
int win(int x,int y)
{
	 int horizon=horizonWin(x,y); //横向胜利 
	 int vertical=verticalWin(x,y); //竖向胜利 
	 int positiveDiagonal=positiveDiagonalWin(x,y);
	 int negtiveDiagoanl=negativeDiagonalWin(x,y);
	 
     if(horizon||vertical||positiveDiagonal||negtiveDiagoanl)
	 {
 		return 1;
 	} 
	return 0;
} 
//横向

int horizonWin(int x,int y)
{
	int i;
	for(i=0;i<SIZE;i++)
	{
		int j;
		for(j=0;j<SIZE-4;j++)
		{
			int k;
			int res1=0;
			int res2=0;
			for(k=0;k<5;k++)
			{
				res1+=(strcmp(board[i][k+j],"●")==0);
				res2+=(strcmp(board[i][j+k],"○")==0);
			}
		//	printf("%d,%d\n",res1,res2);
			if(res1==5||res2==5)
			{
				return 1;
			}
		}
	}
	return 0;
} 
int verticalWin(int x,int y)//纵向 
{
	int i;
	for(i=0;i<SIZE;i++)
	{
		int j;
		for(j=0;j<SIZE-4;j++)
		{
			int k;
			int res1=0;
			int res2=0;
			for(k=0;k<5;k++)
			{
				res1+=(strcmp(board[k+j][i],"●")==0);
				res2+=(strcmp(board[k+j][i],"○")==0);
			}
			if(res1==5||res2==5)
			{
				return 1;
			}
		}
	}
	return 0;
} 
//正斜线胜利判断
int positiveDiagonalWin(int x,int y)
{
	int i;//表面行的下标
	for(i=0;i<SIZE-4;i++)
	{
		int j;
		for(j=0;j<=SIZE-5;j++)
		{
			int res1=0; //表示有n个黑色棋子 
			int res2=0; //表示有n个白色棋子 
			int k;
			for(k=0;k<5;k++)
			{
				if(strcmp(board[i+k][j+k],"●")==0) 
				{
					res1+=1;
				}
				if(strcmp(board[i+k][k+j],"○")==0)
				{
					res2+=1;
				}
			} 
			if(res1==5||res2==5)
			{
				return 1;
			}
		}
	}
	return 0;	
}
int negativeDiagonalWin(int x,int y)//反斜方向 
{
	int i;//行的下标
	for(i=4;i<SIZE;i++)
	{
		int j;
		for(j=0;j<=SIZE-4;j++)
		{
			int res1=0; //表示有n个黑色棋子 
			int res2=0; //表示有n个白色棋子 
			int k;
			for(k=0;k<5;k++)
			{
				if(strcmp(board[i-k][j+k],"●")==0) 
				{
					res1+=1;
				}
				if(strcmp(board[i-k][j+k],"○")==0)
				{
					res2+=1;
				}
			} 
			if(res1==5||res2==5)
			{
				return 1;
			}
		}
	}
	return 0;	
}
int main()
{
	initBoard();
	printBoard(); 
	//下棋
	int gameOver; 
	int gamer=1; ////做一个循环,如果玩家输入有误,循环执行
	do
	{	
		
		gameOver=play(&gamer);
		//	printBoard(); 
		
	}while(!gameOver);
	printf("GameOver!");
	return 0;
} 

实践周学习记录。

© 著作权归作者所有

共有 人打赏支持
奔跑的码农
粉丝 11
博文 23
码字总数 28187
作品 0
海淀
程序员
Java编程语言:学JAVA没有基础,给你4个方向少走弯路。

Java java常常跟"企业"联系在一起, 因为具备一些很好的语言特性, 以及丰富的框架, 在企业应用中最被青睐, 你总可以听到关于J2EE, JSP, Hibernate之类的东西的讨论. 同时, java在手机领域也有...

启示录是真的 ⋅ 05/24 ⋅ 0

零基础准备学习编程,应该从哪门语言学起?

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 06/06 ⋅ 0

Java就业变难了?你需要对自己有点信心

伴随着IT的火热,越来越多的人进入了IT领域,这在进一步推动着IT发展的同时也极大增加了就业压力。伴随着激烈的岗位竞争,越来越多的人开始感叹工作难找,越火的行业越是如此,Java自是首当其...

糖宝_d864 ⋅ 06/08 ⋅ 0

做几道基础的Java测试题,看看最近有进步吗?欢迎来学习

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

启示录是真的 ⋅ 05/24 ⋅ 0

Java语言标准(第10版)第一章(节选)翻译与评注

英文原文链接:https://docs.oracle.com/javase/specs/jls/se10/html/jls-1.html 评注是括在鱼尾号之间的文字,其余均为翻译 Java编程语言是一种通用目的的【有别于VBA、Matlab这些专用型语言...

Jelif ⋅ 06/02 ⋅ 0

Java程序员必读书单,家族又添新成员

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 有些革命出其不意地吸引了全世界的眼球。Twitter、Linux操作系统和...

异步社区 ⋅ 05/09 ⋅ 0

关于Java编程基础学习输入输出IO的问题

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

浅谈把Java字节码译为C代码的意义

Java字节码是基于栈的一种编码。这种编码方式十分方便解释器的设计,但同时不利于程序分析,因此一些高效的代码优化技术无法方便的Java字节码上实现。 先大体说说Java字节码的特点。目前版本...

小欣妹妹 ⋅ 04/26 ⋅ 0

SWIG与JAVA 交互最全开发指南一

项目背景 最近开始研究做移动端项目,但是本人基本是做了五六年的c++的底层研发,对C++的研发可以说是驾轻就熟了,但是对于android还是属于刚入门阶段,虽然断断续续做移动端也做了一年,但是...

揽月凡尘 ⋅ 06/16 ⋅ 0

为什么python突然变得这么火了?

可能会有一种感觉python突然之间变得这么火热了,个人感觉还是雷声大雨点小,真正用pytho落地的东西还是少,不可否认的python前途无量,现在人工智能的调用框架选择了python。所以目前阶段选...

Python燕大侠 ⋅ 05/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Confluence 6 从其他备份中恢复数据

一般来说,Confluence 数据库可以从 Administration Console 或者 Confluence Setup Wizard 中进行恢复。 如果你在恢复压缩的 XML 备份的时候遇到了问题,你还是可以对整个站点进行恢复的,如...

honeymose ⋅ 9分钟前 ⋅ 0

myeclipse10 快速搭建spring boot开发环境(入门)

1.创建一个maven的web项目 注意上面标红的部分记得选上 2.创建的maven目录结构,有缺失的目录可以自己建立目录补充 补充后 这时候一个maven的web项目创建完成 3.配置pom.xml配置文件 <proje...

小海bug ⋅ 21分钟前 ⋅ 0

nginx.conf

=========================================================================== nginx.conf =========================================================================== user nobody; #......

A__17 ⋅ 24分钟前 ⋅ 0

645. Set Mismatch - LeetCode

Question 645. Set Mismatch Solution 思路: 遍历每个数字,然后将其应该出现的位置上的数字变为其相反数,这样如果我们再变为其相反数之前已经成负数了,说明该数字是重复数,将其将入结果r...

yysue ⋅ 38分钟前 ⋅ 0

Python这么强?红包杀手、消息撤回也可以无视,手机App辅助!

论述 标题也许有点不好理解,其实就是一款利用Python实现的可以监控微信APP内的红包与消息撤回的助手。不得不说,这确实是一款大家钟意的神器。 消息撤回是一件很让人恶心的事,毕竟人都是有...

Python燕大侠 ⋅ 54分钟前 ⋅ 0

压缩打包介绍、gzip压缩工具、bzip2压缩工具、xz压缩工具

压缩打包介绍 压缩的好处不仅能节省磁盘空间而且在传输的时候节省传输时间和网络带宽 windows系统下文件带有 .rar .zip .7z 后缀的就是压缩文件 linux系统下则是 .zip, .gz, .bz2, .xz, ...

黄昏残影 ⋅ 58分钟前 ⋅ 0

观察者模式

1.利用java原生类进行操作 package observer;import java.util.Observable;import java.util.Observer;/** * @author shadow * @Date 2016年8月12日下午7:29:31 * @Fun 观察目标 **/......

Cobbage ⋅ 今天 ⋅ 0

Ubuntu打印服务器配置

参考:https://blog.csdn.net/gsls200808/article/details/50950586 https://blog.csdn.net/jiay2/article/details/80252369 https://wiki.gentoo.org/wiki/HPLIP 由于媳妇儿要大量打印资料,......

大熊猫 ⋅ 今天 ⋅ 0

面试的角度诠释Java工程师(二)

原文出处: locality 续言: 相信每一位简书的作者,都会有我这样的思考:怎么写好一篇文章?或者怎么写好一篇技术类的文章?我就先说说我的感悟吧,写文章其实和写程序是一样的。为什么我会...

颖伙虫 ⋅ 今天 ⋅ 0

github中SSH的Key

https://help.github.com/articles/connecting-to-github-with-ssh/ https://help.github.com/articles/testing-your-ssh-connection/ https://help.github.com/articles/adding-a-new-ssh-k......

whoisliang ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部