java程序设计(五子棋)一个文件

时间:2024.4.27

package 五子棋;

import javax.imageio.ImageIO;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

public class FiveChessGame extends JFrame implements MouseListener,Runnable{ public static void main(String args[]){

FiveChessGame ff = new FiveChessGame();

}

int height = Toolkit.getDefaultToolkit().getScreenSize().height;

int width = Toolkit.getDefaultToolkit().getScreenSize().width;

BufferedImage bgImage = null;

int x = 0;

int y = 0;

int allChess [][] = new int [19][19];

boolean isBlack = true;

boolean canPlay = true;

String message = "黑方先行"; int maxTime = 0; Thread t = new Thread(this); int blackTime = 0; int whiteTime = 0; String blackMessage = "无限制"; String whiteMessage = "无限制"; public FiveChessGame(){ this.setTitle("五子棋"); this.setSize(500,500); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation((width - 500)/2, (height - 500)/2); this.addMouseListener(this); this.setVisible(true);

t.start(); t.suspend(); this.repaint(); try{ bgImage = ImageIO.read(new File("E:/image/bgImage.jpg")); } catch (IOException e){ e.printStackTrace(); } } public void paint(Graphics g){ BufferedImage bi = new BufferedImage(500,500,BufferedImage.TYPE_INT_ARGB); Graphics g2 = bi.createGraphics(); g2.drawImage(bgImage, 0,0, this); g2.setColor(Color.black); g2.setFont(new Font("黑体",Font.BOLD,25)); g2.drawString("游戏信息: " + message, 20,60); g2.setFont(new Font("宋体",Font.BOLD,20)); g2.setColor(Color.white); g2.fillRect(15, 460,185, 25); g2.fillRect(255, 460,185, 25); g2.setColor(Color.black ); g2.drawString("黑方时间:"+blackMessage, 20,480); g2.drawString("白方时间:"+whiteMessage, 260,480); g2.setColor(Color.blue); g2.fill3DRect(390, 70, 90, 30,true); g2.fill3DRect(390, 120, 90, 30,true); g2.fill3DRect(390,170, 90, 30,true); g2.fill3DRect(390,220, 90, 30,true); g2.fill3DRect(390,270, 90, 30,true); g2.fill3DRect(390, 320, 90, 30,true); g2.fill3DRect(390, 370, 90, 30,true); g2.fill3DRect(390, 420, 90, 30,true); g2.setColor(Color.yellow); g2.drawString("开始游戏", 394, 93); g2.drawString("游戏设置", 394, 143); g2.drawString("游戏说明", 394, 193); g2.drawString("暂停", 412,243); g2.drawString("继续", 412, 293);

g2.drawString("认输", 412, 343); g2.drawString("关于", 412, 393); g2.drawString("退出", 412, 443); g2.setColor(Color.black); for(int i=0;i<19;i++){ g2.drawLine(10, 70+20*i, 370, 70+20*i); g2.drawLine(10+20*i, 70, 10+20*i, 430); } g2.fillOval(66, 126, 8, 8); g2.fillOval(306, 126, 8, 8); g2.fillOval(306, 366, 8, 8); g2.fillOval(66, 366, 8, 8); g2.fillOval(306, 246, 8, 8); g2.fillOval(186, 126, 8, 8); g2.fillOval(66, 246, 8, 8); g2.fillOval(186, 366, 8, 8); g2.fillOval(186, 246, 8, 8); for(int i=0;i<19;i++){ for(int j=0;j<19;j++){ if(allChess[i][j] == 1){ int tempX = i*20+10; int tempY = j*20+70; g2.fillOval(tempX-8, tempY-8, 16, 16); } if(allChess[i][j] == 2){ int tempX = i*20+10; int tempY = j*20+70; g2.setColor(Color.white); g2.fillOval(tempX-8, tempY-8, 16, 16); g2.setColor(Color.black); g2.drawOval(tempX-8, tempY-8, 16, 16); } } } g.drawImage(bi, 0, 0, this); } public void mouseClicked (MouseEvent e){}

public void mouseExited (MouseEvent e){}

public void mouseEntered (MouseEvent e){}

public void mouseReleased (MouseEvent e){}

public void mousePressed (MouseEvent e){

//System.out.println("X坐标:"+e.getX()+" "+"Y坐标"+e.getY());

if(canPlay == true){

x = e.getX();

y = e.getY();

if(x >=10 && x<=370 && y>=70 && y<=430){

x = (x-10)/20;

y = (y-70)/20;

if(allChess[x][y] == 0){

if(isBlack == true){

allChess[x][y] = 1;

isBlack = false;

message = "轮到白方";

}else {

allChess[x][y] = 2;

isBlack = true;

message = "轮到黑方";

}

boolean winFlag = this.checkWin();

if (winFlag == true){

JOptionPane.showMessageDialog(this, "游戏结束!"+" "+(allChess[x][y]==1? "黑方" :"白方")+"获胜!");

canPlay = false;

}

}else {

JOptionPane.showMessageDialog(this, "当前位置已经有棋子,请重新落子!");

}

this.repaint();

}

}

if(e.getX()>=390 && e.getY()>=70 && e.getX()<=480 && e.getY()<=100){

int result = JOptionPane.showConfirmDialog(this, "是否重新开始游戏?"); if (result == 0){

for (int i =0;i<19;i++){

for (int j =0;j<19;j++){

allChess[i][j] = 0;

canPlay = true;

}

}

//allChess = new int[19][19];

message = "黑方先行";

isBlack = true;

blackTime = maxTime;

whiteTime = maxTime;

if(maxTime>0){

blackMessage

maxTime/3600+":"+(maxTime/60-maxTime/3600*60)+":"+(maxTime-maxTime/60*60); whiteMessage

maxTime/3600+":"+(maxTime/60-maxTime/3600*60)+":"+(maxTime-maxTime/60*60); t.resume();

}else{ = =

blackMessage = "无限制";

whiteMessage = "无限制";

}

this.repaint();

}

}

if(e.getX()>=390 && e.getX()<=480 && e.getY()>=120 && e.getY()<=150){

String input = JOptionPane.showInputDialog("请输入游戏的最大时间(分钟),如果输入0,表示没有时间限制:");

try{

maxTime = Integer.parseInt(input)*60;

if(maxTime<0){

JOptionPane.showMessageDialog(this, "请输入正确信息,不允许输入负数!");

}

if(maxTime == 0){

开始游戏?");

int result = JOptionPane.showConfirmDialog(this, "设置完成,是否重新if (result == 0){ for (int i =0;i<19;i++){ for (int j =0;j<19;j++){ allChess[i][j] = 0; } } //allChess = new int[19][19]; message = "黑方先行"; isBlack = true; blackTime = maxTime; whiteTime = maxTime; blackMessage = "无限制";

whiteMessage = "无限制"; this.repaint(); } } if(maxTime>0){

int result = JOptionPane.showConfirmDialog(this, "设置完成,是否重新

if (result == 0){

for (int i =0;i<19;i++){

for (int j =0;j<19;j++){

allChess[i][j] = 0;

}

}

//allChess = new int[19][19]; 开始游戏?");

message = "黑方先行";

isBlack = true;

blackTime = maxTime;

whiteTime = maxTime;

blackMessage

maxTime/3600+":"+(maxTime/60-maxTime/3600*60)+":"+(maxTime-maxTime/60*60); whiteMessage

maxTime/3600+":"+(maxTime/60-maxTime/3600*60)+":"+(maxTime-maxTime/60*60); t.resume();

this.repaint();

}

}

}catch (NumberFormatException e1){ = =

JOptionPane.showMessageDialog(this, "请输入正确信息!");

}

}

if(e.getX()>=390 && e.getX()<=480 && e.getY()>=170 && e.getY()<=200){

JOptionPane.showMessageDialog(this, "这是一个五子棋游戏程序,黑白双方轮流下棋,当某一方连到五子时游戏结束!");

}

if(e.getX()>=390 && e.getX()<=480 && e.getY()>=220 && e.getY()<=250){

//JOptionPane.showMessageDialog(this, "游戏已暂停"); canPlay = false; } if(e.getX()>=390 && e.getX()<=480 && e.getY()>=270 && e.getY()<=300){ //JOptionPane.showMessageDialog(this, "游戏继续进行"); canPlay = true; } if(e.getX()>=390 && e.getX()<=480 && e.getY()>=320 && e.getY()<=350){ int result = JOptionPane.showConfirmDialog(this, "是否确认认输?");

"); //System.out.println(result); if(result == 0){ if(isBlack == true){ JOptionPane.showMessageDialog(this, "黑方已经认输,游戏结束! } else { JOptionPane.showMessageDialog(this, "白方已经认输,游戏结束!"); } canPlay = false; } } if(e.getX()>=390 && e.getX()<=480 && e.getY()>=370 && e.getY()<=400){ JOptionPane.showMessageDialog(this, "本游戏由软件09班韩新凯学习制作!"); } if(e.getX()>=390 && e.getX()<=480 && e.getY()>=420 && e.getY()<=450){ JOptionPane.showMessageDialog(this, "游戏结束"); System.exit(0); } } private boolean checkWin(){ boolean flag = false; int count = 1; int color = allChess[x][y]; /* int i = 1; while (color == allChess[x+i][y]){ count ++; i++; } i = 1; while (color == allChess[x-i][y]){ count ++; i++; } if(count >= 5){ flag = true; } int i2 = 1; int count2 = 1; while (color == allChess[x][y+i2]){ count2 ++; i2++;

} i2 = 1; while (color == allChess[x][y-i2]){ count2 ++; i2++; } if(count2 >= 5){ flag = true; } int i3 =1; int count3 = 1; while (color == allChess[x+i3][y-i3]){ count3 ++; i3++; } i3 = 1; while (color == allChess[x-i3][y+i3]){ count3 ++; i3++; } if(count3 >= 5){ flag = true; } int i4 =1; int count4 = 1; while (color == allChess[x+i4][y+i4]){ count4 ++; i4++; } i4 = 1; while (color == allChess[x-i4][y-i4]){ count4 ++; i4++; } if(count4 >= 5){ flag = true; }*/ count =this.checkCount(1, 0, color); if(count >= 5){ flag = true; }else { count = this.checkCount(0, 1, color);

if(count >= 5){

flag = true;

}else {

count = this.checkCount(1, -1, color);

if(count >= 5){

flag = true;

}else {

count = this.checkCount(1, 1, color);

if(count >= 5){

flag = true;

}

}

}

}

return flag;

}

private int checkCount(int xChange , int yChange ,int color){

int count = 1;

int tempX = xChange;

int tempY = yChange;

while (x + xChange >=0 && x+xChange<=18 && y+yChange>=0 && y+yChange<=18 && color == allChess[x+xChange][y+yChange]){

count ++;

if(xChange != 0)

xChange ++;

if(yChange != 0){

if(yChange > 0)

yChange ++;

else {

yChange --;

}

}

}

xChange = tempX;

yChange = tempY;

while (x - xChange >=0 && x-xChange<=18 && y-yChange>=0 && y-yChange<=18 && color == allChess[x-xChange][y-yChange]){

count ++;

if(xChange != 0)

xChange ++;

if(yChange != 0){

if(yChange > 0)

yChange ++;

else { yChange --; } } } return count; } public void run(){ if (maxTime > 0){ while (true){ if (isBlack){ blackTime --; if (blackTime == 0){

JOptionPane.showMessageDialog(this, "黑方超时,游戏结束!"); }

}else{

whiteTime --;

if (whiteTime == 0){

JOptionPane.showMessageDialog(this, "白方超时,游戏结束!"); }

}

blackMessage = blackTime/3600+":"+(blackTime/60-blackTime/3600*60)+":"+(blackTime-blackTime/60*60);

whiteMessage = whiteTime/3600+":"+(whiteTime/60-whiteTime/3600*60)+":"+(whiteTime-whiteTime/60*60); this.repaint();

try{

Thread.sleep(1000);

}catch(InterruptedException e){

e.printStackTrace();

}

}

}

}

}

更多相关推荐:
java 五子棋 课程设计报告

课程设计论文任务书班一课程设计论文题目多用户五子棋游戏二课程设计论文工作自20xx年6月15日起至20xx年6月19日止三课程设计论文地点创新大楼310四课程设计论文内容要求1本课程设计的目的数据类型对面向对象...

五子棋JAVA语言课程设计报告

Java语言程序设计课程设计报告学院信息科学技术学院班级软件技术2班姓名王更新学号1108900505指导教师郭韶升课设时间20xx0317至20xx0326二O一四年三月二十六日目录一设计要求2二设计步骤22...

java五子棋项目报告

河南经贸职业学院信息管理系Java程序设计课程设计报告Java语言程序设计课程设计报告题目设计者班级学号指导教师系部专业信息管理系计算机应用技术20xx年6月25日1河南经贸职业学院信息管理系Java程序设计课...

五子棋JAVA语言课程设计报告

封面Java语言程序设计课程设计报告分院电信分院班级电子商务1班姓名何芳林学号20xx0210460123指导教师吴军良课设时间20xx1220至20xx1231二O一一年十二月二十日10电商1班何芳林Java...

五子棋-Java课程设计

面向对象程序设计课程设计报告实验时间20xx年10月26日实验班级实验报告总份片数1份片实验指导老师设计小组湖南省吉首市吉首大学课程设计报告简单的游戏五子棋小组成员姓名学号组长一实验分工二开发环境实验编译以及测...

java课程设计报告-五子棋

目录第一章软件开发平台游戏设计思路第二章小游戏五子棋的开发过程第一节JAVA基础知识第二节启动程序的分析第三节游戏设计过程第三章总结第四章参考文献第五章附录第一章游戏设计思路第二章第一节java程序基础知识本系...

JAVA语言课程设计报告 五子棋源代码

浙江科技学院经济管理学院JAVA语言课程设计报告选题名称五子棋小游戏学生学号专业班级学生姓名学生成绩指导教师朱军工作时间20xx0627目录1选题简介32需求分析321系统要实现的目标分析322对输入输出数据及...

java课程设计人机对弈五子棋

Java程序设计课程设计报告学院理学院班级姓名学号指导教师课设时间20xx0623至20xx0625二O一五年六月二十五日课程设计论文任务书理学院信息与计算科学专业20xx2班一课程设计论文题目人机对弈五子棋游...

java课程设计五子棋

下面的原始码分为4个文件chessclientjava客户端主程式chessinterfacejava客户端的界面chesspadjava棋盘的绘制chessserverjava服务器端可同时容纳50个人同时在...

Java五子棋课程设计报告

目录第一章概述错误未定义书签课程设计意义课程设计目的课程设计要求第二章网络五子棋设计的需求分析和总体设计21需求分析211功能需求分析212性能需求分析213用户界面需求22系统的主要功能23系统包含的类及类之...

java五子棋课程设计

目录1绪论111课程设计意义112课设目的113课设要求1网络五子棋介绍221网络五子棋介绍222游戏玩法2系统整体设计331整体设计332系统流程图4原理分析541服务器和客户端通信机制542多线程机制7服务...

java课程设计_五子棋(附源代码)

课程设计报告20xx20xx年度第二学期科目业面向对象课程设计网络工程董志文13级2班1308020xx7江涛专学生姓名班学级号指导教师完成日期永磁同步电机双环调速系统的仿真研究目录1概述311课程设计目的31...

java五子棋课程设计报告(25篇)