费力我好大的劲我终于搞定五子棋人人对战了,关于五子棋人人对战对于我来说,最头疼的是斜线连珠问题,我开始用了两个for循环,可是怎么也搞不出来,于是就用一个for循环,竟然出来了,无语啊。这是喜剧还是悲剧啊。
对于人人对战我感觉我们还是在练习重绘以及实例化,思路如下:
1:在接口中定义了五子棋的一些基本常量,
2:画五子棋棋板以及画棋子,最关键的是重绘的问题,其实在这里我用最不熟练的就是返回值的问题,关于返回值我有一个比较形象的比喻,就是:一个东西在盒子里,我们得把它拿出来才能用啊。
3:判断输赢,横纵是很好判断的,但是斜线就有点考验脑细胞了,用一个for循环就可以搞定。
这是关于判断输赢的类:
public class Win {
// 定义一个数组属性
private int[][] data;
/**
* 定义一个带参数的构造器
*/
public Win(int[][] data) {
this.data = data;
}
/**
* 定义四个不同的方法来判断输赢
*/
public boolean winRow(int r, int c) {
// 用来标记输赢的状态
boolean state = false;
int count = 1;// 计数器从一开始
int value = data[r][c];// 取出单元格的坐标
// 循环二维数组的列,往右判断
for (int j = c + 1; j < data[r].length; j++) {
// 如果棋子是同一个颜色,则计数器加一
if (value == data[r][j]) {
count++;
} else
break;
}
for (int j = c - 1; j >= 0; j--) {
if (value == data[r][j]) {
count++;
} else
break;
}
// 判断计数器是否为五,如果是就五子连珠,赢了
if (count >= 5) {
state = true;
}
return state;
}
public boolean winColumn(int r, int c) {
// 用来标记输赢的状态
boolean state = false;
int count = 1;
int value = data[r][c];// 取出坐标
// 循环二维数组的行,往下判断
for (int i = r + 1; i < data[c].length; i++) {
// 如果是同一颜色则计数器加一
if (value == data[i][c]) {
count++;
} else
break;
}
for (int i = r - 1; i >= 0; i--) {
// 如果是同一颜色则计数器加一
if (value == data[i][c]) {
count++;
} else
break;
}
if (count >= 5) {
state = true;
}
return state;
}
public boolean winLeft(int r, int c) {
// 用来标记输赢的
boolean state = false;
int count1 = 1;
int count2 = 1;
// int value = data[r][c];// 取出坐标
// // 循环
// for (int i = c + 1; i < data[r].length; i++) {
// for (int j = r + 1; j < data[c].length; j++) {
// if (value == data[i][j]) {
// count1++;
// } else
// break;
// }
// }
// for (int i = c - 1; i >= 0; i--) {
// for (int j = r - 1; j >= 0; j--) {
// if (value == data[i][j]) {
// count2++;
// } else
// break;
// }
// }
// if ((count1 + count2) >= 5) {
// state = true;
// }
int value = data[r][c];// 取出坐标
for (int j = c + 1, i = r + 1; j < data[r].length && i < data[c].length; j++, i++) {
if (value == data[i][j]) {
count1++;
} else
break;
}
for (int j = c - 1, i = r - 1; j >= 0 && i >= 0; j--, i--) {
if (value == data[i][j]) {
count2++;
}
}
if ((count1 + count2) >= 5) {
state = true;
}
return state;
}
public boolean winRight(int r, int c) {
boolean state = false;
int count1 = 1;
int count2 = 1;
int value = data[r][c];
for (int j = c + 1, i = r - 1; j < data[r].length && i >= 0; j++, i--) {
if (value == data[i][j]){
count1++;
}
}
for (int j = c - 1, i = r + 1; j >= 0 && i < data[c].length; j--, i++) {
if (value == data[i][j]) {
count2++;
}
}
if ((count1 + count2) >= 5) {
state = true;
}
return state;
}
}
分享到:
相关推荐
标题 "MFC 五子棋 人人对战" 指的是一个使用Microsoft Foundation Classes (MFC) 开发的五子棋游戏,允许两个人面对面进行对战。MFC 是微软提供的一套C++类库,它基于Windows API,简化了Windows应用程序的开发。这...
【Java五子棋人人对战可悔棋】是一款基于Java编程语言实现的两人对弈的五子棋游戏,允许玩家在走错棋步时进行悔棋操作,为玩家提供了更加自由的游戏体验。该项目由个人独立完成,并获得了老师的高度评价,成绩A+。...
《五子棋游戏详解:人人对战与人机对战技术》 五子棋,作为一项深受人们喜爱的传统智力游戏,其简洁的规则和深奥的策略性使其在电子游戏领域也有着广泛的适应性。本篇文章将围绕"五子棋 人人对战 人机对战"这一主题...
【安卓五子棋人人对战】是一个专门为Android平台设计的双人对弈应用,它允许两位玩家在同一设备上进行实时的五子棋游戏。这款应用的核心特性是利用自定义View来构建游戏界面,以实现更加灵活和高效的游戏交互。下面...
【Java五子棋人人对战】是一个基于Java编程语言实现的简单桌面游戏,它允许两位玩家在同一设备上进行对弈。这个项目可能是为一个IT课程的实验报告而创建的,但与作者之前的作品相比,其功能可能有所简化,因为描述中...
这款名为"五子棋人人对战"的程序充分利用了Java的AWT(Abstract Window Toolkit)和Swing库来创建图形用户界面(GUI),使得用户可以进行直观的人机对战。 **Java AWT和Swing** AWT是Java最早提供的GUI库,它提供...
人人对战模式则主要依赖于网络编程技术,让两个玩家可以在同一网络环境下进行实时对战。这可能涉及到TCP/IP协议的使用,以及数据的序列化和反序列化,确保棋步在网络传输过程中的准确无误。如果游戏支持跨平台对战,...
【五子棋人人对战小游戏】是基于Java编程语言实现的一款经典桌面游戏,它通过简单的图形界面让两位玩家可以在线上或本地进行实时对战。这款游戏的代码结构清晰,易于理解,非常适合初学者学习和研究Java图形用户界面...
《易语言五子棋人人对战》是一款基于易语言开发的桌面游戏,旨在提供一个简单、直观的五子棋对战平台,让玩家可以与其他人进行实时的对弈。源码的开放使得开发者或者编程爱好者有机会深入理解五子棋游戏的逻辑实现,...
Java五子棋人人对战程序是一款使用Java编程语言开发的桌面游戏应用,它实现了玩家与玩家之间的实时对弈。此程序具有丰富的功能,包括开始新游戏、重新开始、悔棋等,满足了用户在游戏过程中的多种需求。此外,它还...
在本项目中,"这是一个用API写的五子棋人人对战平台",我们可以深入探讨以下几个IT领域的关键知识点: 1. **API(Application Programming Interface)**: API是软件开发中的一个重要概念,它定义了不同软件组件...
【VC++五子棋人人对战】是一款基于微软的Visual C++ 6.0开发环境构建的棋类游戏,它允许两位玩家通过人机交互进行五子棋对弈。五子棋是一种简单却富有策略性的游戏,目标是在棋盘上先连成五子直线(横、竖或斜线)的...
【描述】"这是一个五子棋小代码,只有人人对战,没有智能." 这句话揭示了这个项目的特点:它的代码量不大,专注于提供两个人之间的人工对战功能,即玩家与玩家之间的实时对弈,而没有包含AI(人工智能)对战模式。...
在本项目中,"使用C# wpf编写的五子棋人人对战"是一个基于C#编程语言和Windows Presentation Foundation(WPF)框架构建的桌面应用程序。WPF是.NET Framework的一部分,专门用于创建具有丰富图形界面的应用程序。...
五子棋人人对战c五子棋课程设计报告.doc
易语言五子棋人人对战源码是一款基于易语言编程环境开发的桌面游戏,它允许两位玩家在同一台计算机上进行实时对弈。易语言是一种中国本土的编程语言,旨在降低编程难度,让更多人能参与到软件开发中来。五子棋是一种...
QT五子棋人人对战全代码记录是一份详细介绍如何使用QT框架开发一款五子棋对战游戏的资源。QT是一个跨平台的C++图形用户界面应用程序开发框架,它提供了丰富的库和工具,使得开发者能够方便地创建具有现代化图形界面...
本项目基于QT框架,实现了五子棋的多人对战模式,包括人人对战、人机对战以及程序与程序对战。 【QT框架详解】 QT是一个跨平台的C++库,它提供了丰富的GUI工具包,支持Windows、Linux、macOS等多种操作系统。QT库...
python编写的五子棋人人对战。某学校的python课程大作业,需要用到graphics.py库(这里免积分下载:http://download.csdn.net/detail/w1135181854u/6730647),把graphics.py 放进python安装文件夹的lib文件夹里就好...
本项目"五子棋【人人对战】"就是一个基于移动端的简易五子棋游戏,开发者利用Android平台上的`View`组件进行界面布局和游戏逻辑的实现。在这里,我们将深入探讨`View`组件在游戏开发中的应用以及五子棋游戏的基本...