java五子棋java程序代码程序为什么不能运行

JAVA五子棋对弈程序的设计与实现(最终版)
发布时间: 19:44:40
文档类型: DOC 文档
正在打开DOC文档读取内容,请稍等......
文档内容已读取完毕!全文共 53 页
资源预览需要最新版本的Flash Player支持。您尚未安装或版本过低,建议您立即安装,以便显示文档阅读器:
内容简介:> JAVA五子棋对弈程序的设计与实现(最终版) 值中输入:C:/jdk1.6。同样再新建一个变量名CLASSPATH,变量值中输入:C:\jdk1.6\lib;还需要在Path变量值后面添加一个值:C:\jdk1.6\bin。至此JAVA环境安装成功。我们可以在命令行中敲入命令java如果显示java帮助,则证明环境设置成功。Tomcat环境搭建安装TOMCAT,直接使用默认安装就可以了,假如我们将其安装在C:\Tomcat6.0,安装完毕后,开始设置环境变量,新建环境变量CATALINA_HOME,值为C:\Tomcat6.0,新建CATALINA_BASE,值为C:\Tomcat6.0。打开Tomcat6.0文件中的bin文件,双击其中的运行程序startup.bat,显示serverstart,服务... 值中输入:C:/jdk1.6。同样再新建一个变量名CLASSPATH,变量值中输入:C:\jdk1.6\lib;还需要在Path变量值后面添加一个值:C:\jdk1.6\bin。至此JAVA环境安装成功。我们可以在命令行中敲入命令java如果显示java帮助,则证明环境设置成功。Tomcat环境搭建安装TOMCAT,直接使用默认安装就可以了,假如我们将其安装在C:\Tomcat6.0,安装完毕后,开始设置环境变量,新建环境变量CATALINA_HOME,值为C:\Tomcat6.0,新建CATALINA_BASE,值为C:\Tomcat6.0。打开Tomcat6.0文件中的bin文件,双击其中的运行程序startup.bat,显示serverstart,服务器正常启动,此时在浏览器上敲入本地测试地址:http://localhost:8080如果出现Tomcat页面则证明Tomcat安装成功,而且正常启动。2012届计算机科学与技术专业毕业设计(论文)第27页共47页7系统实现7.1用户登陆流程1.获取用户输入的数据。2.将用户输入的数据与数据库中的数据进行比较3.根据比较的结果做出相应的反应下面是用户登录的流程图和用户登录界面图7-1。源代码见附件1罗友:基于Web的JAVA五子棋对弈程序的设计与实现第28页共47页Index.jsp登录用户名、密码错误正确用户状态管理员页面普通用户页面7.2用户进入游戏(初始化数据库棋盘)流程在用户登录游戏过后,可以看见界面上有按钮playgame,点击按钮可以进入游戏界面,在这个过程中程序初始化了棋盘,既在数据库中初始化了棋盘上的所有棋子具体的流程如图7-2。源代码见附件2获取当前时间当前棋子位置棋子状态置-1棋子状态置0不在棋盘上在棋盘上图7-1用户登陆流程图7-2初始化棋盘流程2012届计算机科学与技术专业毕业设计(论文)第29页共47页7.3用户玩游戏流程在用户进入游戏界面时,本款游戏已经开始,用户先下子,根据棋盘上方的提示进行就可以了,只要鼠标点击方框即可下子,本游戏是事件驱动。具体的流程如图7-3。源代码见附件3事件用户下子用户胜出游戏结束电脑下子电脑胜出否是否是图7-3用户玩游戏流程罗友:基于Web的JAVA五子棋对弈程序的设计与实现第30页共47页7.4添加新用户由于系统设计的比较简单,所以用户信息比较简约。其具体的流程图如图7-4,界面如图。详细源代码见附件48JAVA五子棋对弈程序设计的技术关键8.1javascript中AJAX技术AJAX指异步JavaScript及XML(AsynchronousJavaScriptAndXML)。国内翻译常为“阿贾克斯”和阿贾克斯足球队同音。Web应用的交互如Flickr,Backpack和Google在这方面已经有质的飞跃。这个术语源自描述从基于Web的应用到基于数据的应用的转换。在基于数据的应用中,注册界面两次密码相同用户信息用户数据表否是图7-4用户注册流程2012届计算机科学与技术专业毕业设计(论文)第31页共47页用户需求的数据如联系人列表,可以从独立于实际网页的服务端取得并且可以被动态地写入网页中,给缓慢的Web应用体验着色使之像桌面应用一样。Ajax的核心是JavaScript对象XmlHttpRequest。该对象在InternetExplorer5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。本系统的ajax代码如下:varxmlhttp;varisPs=1;function$(id){returndocument.getElementById(id);}functionstring(m,n){return(m+","+n);}functioncheck(m,n){varv=m+","+n;if(isPs!=1){}else{isPs=0;if($(m+","+n).className=="c0"){$(v).className="c2";$("title").innerHTML="请等待电脑下子,谢谢!";creatHttp();xmlhttp.onreadystatechange=callback;xmlhttp.open("GET","showServlet?X="+m+"&Y="+n+"&di="+,true);xmlhttp.send(null);}else{alert("此处不可下子,已有棋子");}}}functioncreatHttp(){if(window.XMLHttpRequest){xmlhttp=newXMLHttpRequest();if(xmlhttp.overrideMineType){xmlhttp.overrideMineType("text/xml");}}elseif(window.ActiveXObject){varactiveName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];for(vari=0;i<activeName.Length;i++){try{xmlhttp=newActivXObject(activeName[i]);break;罗友:基于Web的JAVA五子棋对弈程序的设计与实现第32页共47页}catch(e){}}}}functioncallback(){//alert();//alert(xmlhttp.readyState+"---"+xmlhttp.status);if(xmlhttp.readyState==4&&xmlhttp.status==200){varvalue=xmlhttp.responseText;if(value==1){$("title").innerHTML="恭喜!你赢了。";}elseif(value==-1){$("title").innerHTML="恭喜!电脑赢了。";}else{$(value).className="c1";isPs=1;$("title").innerHTML="现在该你下子。";}}}8.2电脑下棋算法设计本款游戏最核心的地方就是算法,因为这是整个程序最难的模块。算法的中心思想是:利用分数代表每个位置的重要程度,越重要的位置的分数值会越高,当电脑下棋时会先将电脑和玩家棋型的分数分别计算一遍,然后选择二者中分数最高的点下子。如果玩家的分数高,那么代表电脑应该防守,如果电脑的分数高,那么代表电脑应该进攻。具体的分数值赋值如下:分数电脑玩家活二6050半活二4035死二1010半死二1010活三950700半活三900650死三100100半死三100100活四半活四死四4000800半死四届计算机科学与技术专业毕业设计(论文)第33页共47页活五半活五死五半死五解释一下其中的活,半活,死,半死:活:代表几个子是相连的,中间没有空格,两端都至少有一个空格。半活:代表几个子不是相连的,几个子中间有一个空格,两端都至少有一个空格。死:代表几个子是相连的,中间没有空格,但有一端紧挨着对方的棋子或有一端正好在棋盘的边界。半死:代表几个子不是相连的,几个子中间有一个空格,而且一端紧挨着对方的棋子或有一端正好在棋盘的边界。每个位置的分数的计算方式是各个方向的分数相加,最后找出电脑棋型和玩家棋型的分数的最高的位置为电脑的下棋点下棋。具体...
网站备案:桂ICP备号-1 (C)copyright@
帮帮文库版权所有java程序--控制台五子棋
控制台五子棋,具体思路见代码注释。
代码如下:
import java.io.IOE
import java.util.S
//控制台简单五子棋
public class GoBang {
//二维数组作为棋盘
private static char[][] board=new char[16][16];
//已下棋子数目
//分别代表玩家1,2的棋子
private static char[] qizi={&#39;#&#39;,&#39;@&#39;};
//八方向搜索检测
private static int[] dx={-1,0,-1,-1,1,1,0,1};
private static int[] dy={0,-1,-1,1,-1,1,1,0};
//输入检测
private static int CheckInput(int x,int y){
if(board[x][y]!=&#39;+&#39;)
if(x15||y15)
//边界检测
private static int Check(int x,int y){
if(x>15||x15||y<1)
//检测玩家是否获胜,需要传入玩家编号,及当前落点坐标
private static int CheckAns(int num,int x,int y){
if(cnt==15*15)
//横竖 左斜 右斜 四个方向判断是否有五个棋子连在一起
for(int i=0;i=5)
private static void Init(){
for(int i=1;i<=15;i++)
for(int j=1;j<=15;j++)
board[i][j]=&#39;+&#39;;
//输出棋盘
private static void Print(){
for(i=1;i<=15;i++){
for(j=1;j<=15;j++){
System.out.print(board[i][j]);
System.out.println();
public static int run(){
//当前棋手编号,默认0号先下
int num=0;
while(true){
System.out.print(num+1+"号选手请输入您下棋的坐标,应以x y形式: ");
Scanner sc =new Scanner(System.in);
while(true){
x=sc.nextInt();
y=sc.nextInt();
if(CheckInput(x,y)==1)
System.out.print("输入坐标不合法,请重新输入: ");
board[x][y]=qizi[num];
if(CheckAns(num,x,y)==1){
return num+1;
public static void main(String[] args){
System.out.println("欢迎使用lkl的五子棋!");
int ans=run();
System.out.println("恭喜"+ans+"号选手获得最终的胜利");&>&&>&开发技术&>&Java&>&JAVA版五子棋(含源文件和JAR运行程序)
JAVA版五子棋(含源文件和JAR运行程序)
上传大小:17KB
JAVA版五子棋,界面好看,操作简单。值得收藏!!!
综合评分:3.2(5位用户评分)
所需积分:
下载个数:25
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有4条
新手看还是挺不错的
好像太简单了
程序跟我们的要求不一样
单机版的智能看看代码了,玩是没法玩的,总不能你拿鼠标点完了,然后赶紧把鼠标给另一人点一下吧
审核通过送C币
java8/cassandra/netty/scala相关
创建者:xueyumihuan
Java达内课程(18800元)
《疯狂Java实战演义》源代码与运行包
创建者:boxiong86
上传者其他资源上传者专辑
C++版五子棋(源文件)
开发技术热门标签
VIP会员动态
前端开发重难点
17年软考最新真题及解析
物联网全栈开发专题
二十大技术领域优质资源
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
JAVA版五子棋(含源文件和JAR运行程序)
会员到期时间:剩余下载个数:
请勿使用迅雷下载
积分不足!
资源所需积分
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分
当前拥有积分
VIP年卡全年1200个资源免积分下载
请勿使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
jiangmao92111
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:1156人阅读
java基础(16)
今天在浏览李刚那本疯狂Java讲义时看到上面有个五子棋的小程序例题练习,书上面已经实现了一部分功能,正好没什么事就自己在书上例题的基础上进行丰富完善,修改。
对于写一个五子棋游戏,肯定第一件事就是建立一个棋盘,而这个棋盘是个平面图形所以使用二维函数来作为棋盘的载体。
棋盘的初始化代码如下:
private static int BOARD_SIZE = 16;
private String[][]
public void initBoard()
board = new String[BOARD_SIZE][BOARD_SIZE];
for(int i = 0; i & BOARD_SIZE; i++)
for(int j = 0; j & BOARD_SIZE; j++)
if(i == 0)
board[i][j] = " 0";
if(j &= 10)
board[i][j] = String.valueOf(j) ;
board[i][j] =" " + String.valueOf(j) ;
else if(j == 0 && i != 0)
board[i][j] = String.valueOf(i);
board[i][j] = " " + String.valueOf(i) ;
board[i][j] = "╋";
public void printBoard()
//在控制台上输出棋盘的方法
for(int j = 0; j & BOARD_SIZE; j++)
for(int i = 0; i & BOARD_SIZE; i++)
System.out.print(board[i][j]);
System.out.print("\n");
其中 public void initBoard() 方法就是对棋盘进行初始化,生成一个15*15大小的棋盘,其中还有一行和一竖则是用于对棋盘的行数和列数进行标记。
public void printBoard() 方法就是使用循环输出该棋盘。
建立棋盘后接下来我们就应该输入我们下棋的坐标,但是如何接受从键盘输入的信息呢?
BufferedReader
br =newBufferedReader(newInputStreamReader(System.in));
String inputStr = null;
在接收到键盘的信息后就可以对信息进行分析从而得到我们想要下棋的坐标位置,再把相应的坐标的二维数组元素的值替换成我们的“棋子”然后在通过public void printBoard() 方法输出,则完成下棋的步骤。
但如何完成两个人互相下棋棋子的相互交换呢?
我这里使用了
int flag = -1;
flag = flag*(-1);
以判断正负来控制两个棋手的交替下棋。
最后的重点就是如何判断输赢:我之前想的是遍历整个棋盘来判断是否出现五个连续相同的棋子,但是工程量太大了,时间复杂度也很大,所以不宜采用这种方法。
但是应该通过什么方式判别输赢呢,如果仔细考虑你可以发现,我们是每下一步棋后才会出现输赢的判断,而之前没有;可以判定的是这最后的一个动作导致了棋盘上出现了五个连续的棋子。所以我们只需要判断该棋子的上下,左右,左斜,右斜是否出现了五个相同棋子即可判定出是否赢了!!
该方法如下:
public boolean
judge( String sign, int xPos, int yPos)
int i = 0, j = 0, add = 0;
int count1 = 0, count2 = 0;
int up = 0, down = 0, left = 0, right = 0;
while( i != 4 )
if(up == 0){
if(board[xPos][yPos-add].equals(sign))
if(down == 0){
if(board[xPos][yPos+add].equals(sign))
if(left == 0){
if(board[xPos-add][yPos].equals(sign))
if(right == 0){
if(board[xPos-add][yPos].equals(sign))
right = 1;
if(count1 == 4 || count2 == 4)
return true;
i = up + down + left +
count1 = 0; count2 = 0;
int leftUp = 0, leftDown = 0, rightUp = 0, rightDown = 0;
while( j != 4 )
if(leftUp == 0){
if(board[xPos-add][yPos-add].equals(sign))
leftUp = 1;
if(leftDown == 0){
if(board[xPos+add][yPos+add].equals(sign))
leftDown = 1;
if(rightUp == 0){
if(board[xPos+add][yPos-add].equals(sign))
rightUp = 1;
if(rightDown == 0){
if(board[xPos-add][yPos+add].equals(sign))
rightDown = 1;
if(count1 == 4 || count2 == 4)
return true;
j = leftUp + leftDown + rightUp + rightD
return false;
该程序在控制台上的运行效果如下:
最后贴上整个程序的源代码~~~
import java.io.*;
java.util.A
private static int BOARD_SIZE = 16;
private String[][]
public void initBoard()
board = new String[BOARD_SIZE][BOARD_SIZE];
for(int i = 0; i & BOARD_SIZE; i++)
for(int j = 0; j & BOARD_SIZE; j++)
if(i == 0)
board[i][j] = " 0";
if(j &= 10)
board[i][j] = String.valueOf(j) ;
board[i][j] =" " + String.valueOf(j) ;
else if(j == 0 && i != 0)
board[i][j] = String.valueOf(i);
board[i][j] = " " + String.valueOf(i) ;
board[i][j] = "╋";
public void printBoard()
//在控制台上输出棋盘的方法
for(int j = 0; j & BOARD_SIZE; j++)
for(int i = 0; i & BOARD_SIZE; i++)
System.out.print(board[i][j]);
System.out.print("\n");
public boolean
judge( String sign, int xPos, int yPos)
int i = 0, j = 0, add = 0;
int count1 = 0, count2 = 0;
int up = 0, down = 0, left = 0, right = 0;
while( i != 4 )
if(up == 0){
if(board[xPos][yPos-add].equals(sign))
if(down == 0){
if(board[xPos][yPos+add].equals(sign))
if(left == 0){
if(board[xPos-add][yPos].equals(sign))
if(right == 0){
if(board[xPos-add][yPos].equals(sign))
right = 1;
if(count1 == 4 || count2 == 4)
return true;
i = up + down + left +
count1 = 0; count2 = 0;
int leftUp = 0, leftDown = 0, rightUp = 0, rightDown = 0;
while( j != 4 )
if(leftUp == 0){
if(board[xPos-add][yPos-add].equals(sign))
leftUp = 1;
if(leftDown == 0){
if(board[xPos+add][yPos+add].equals(sign))
leftDown = 1;
if(rightUp == 0){
if(board[xPos+add][yPos-add].equals(sign))
rightUp = 1;
if(rightDown == 0){
if(board[xPos-add][yPos+add].equals(sign))
rightDown = 1;
if(count1 == 4 || count2 == 4)
return true;
j = leftUp + leftDown + rightUp + rightD
return false;
public static void main(String[] args)
Gobang gb = new Gobang();
gb.initBoard();
gb.printBoard();
System.out.print("请*小欢*输入您下棋的坐标,以 x,y 的格式:");
BufferedReader
br = new BufferedReader(new InputStreamReader(System.in));
String inputStr = null;
int flag = -1;
while((inputStr = br.readLine()) != null)
String[] posStrArr = inputStr.split(",");
int xPos = Integer.parseInt(posStrArr[0]);
int yPos = Integer.parseInt(posStrArr[1]);
if(xPos & 16 || yPos & 16 || xPos & 1 || yPos & 1)
if(flag & 0 )
System.out.print("你个傻欢,输错了(超出边界了)!!!
请重新输入: ");
System.out.print("你个傻丹,输错了(超出边界了)!!!
请重新输入:");
if(gb.board[xPos][yPos].equals("●") || gb.board[xPos][yPos].equals("○"))
if(flag & 0 )
System.out.print("你个傻欢,输错了(已经这个地方已经有棋子了)!!!
请重新输入: ");
System.out.print("你个傻丹,输错了(已经这个地方已经有棋子了)!!!
请重新输入:");
if(flag & 0)
gb.board[xPos][yPos] = "●";
gb.printBoard();
if(gb.judge( "●", xPos, yPos)){
System.out.println("***恭喜你,哈哈,逗欢你赢了!!!***");
gb.board[xPos][yPos] = "○";
gb.printBoard();
if(gb.judge( "○", xPos, yPos)){
System.out.println("***恭喜你,哈哈,逗丹你赢了!!!***");
flag = flag*(-1);
if(flag & 0)
System.out.print("请*小欢*输入您下棋的坐标,以 x,y 的格式:");
System.out.print("请*小丹*输入您下棋的坐标,以 x,y 的格式:");
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:6544次
排名:千里之外
原创:17篇

我要回帖

更多关于 java五子棋人机对战 的文章

 

随机推荐