有两种玩法(数字和图片)、可选择初级和高级模式、可查看英雄榜。

1. Block.java

import javax.swing.*;

import java.awt.*;

public class Block extends JTextField{

Point point;

Object object;

Block(){

setEditable(false);

setHorizontalAlignment(JTextField.CENTER);

setFont(new Font("Arial",Font.BOLD,16));

setForeground(Color.blue);

}

public void setAtPoint(Point p){

point=p;

}

public Point getAtPoint(){

return point;

}

public void setObject(Object object){

this.object=object;

if(object instanceof Integer){

Integer number=(Integer)object;

setText(""+number.intValue());

}

else if(object instanceof Image){

repaint();

}

}

public Object getObject(){

return object;

}

public void paintComponent(Graphics g){

super.paintComponent(g);

int w=getBounds().width;

int h=getBounds().height;

try{

g.drawImage((Image)object,0,0,w,h,this);

}

catch(Exception exp){}

}

}

2. HandleImage.java

import java.awt.*;

import javax.swing.*;

import java.awt.image.*;

public class HandleImage extends JComponent{

int imageWidth,imageHeight;

Toolkit tool;

HandleImage(){

tool=getToolkit();

}

public Image [] getImages(Image image,int rows,int colums){

Image [] blockImage=new Image[rows*colums];

try{

imageWidth=image.getWidth(this);

imageHeight=image.getHeight(this);

int w=imageWidth/colums;

int h=imageHeight/rows;

int k=0;

PixelGrabber pg=null;

ImageProducer ip=null;

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

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

int pixels[]= new int[w*h];

pg=new PixelGrabber(image,j*w,i*h,w,h,pixels,0,w);

pg.grabPixels();

ip=new  MemoryImageSource(w,h,pixels,0,w);

blockImage[k]=tool.createImage(ip);

k++;

}

}

}

catch(Exception ee){}

return blockImage;

}

}

3. HandleMove.java

import java.awt.event.*;

import java.awt.*;

import javax.swing.*;

import java.io.*;

import java.applet.*;

import java.net.*;

public class HandleMove extends JPanel implements MouseListener,ActionListener {

Point [][] point;

int spendTime=0;

int grade=1;///

javax.swing.Timer recordTime;

File fileOneGrade,fileTwoGrade;

///

File musicFile=new File("hello.wav");//

URL url;//

AudioClip clip;

///

JTextField showTime;

VerifySuccess verify;

Record record;

HandleMove(){

try

{

url=musicFile.toURL();

clip=Applet.newAudioClip(url);

}

catch(Exception e)

{}

recordTime=new javax.swing.Timer(1000,this);

showTime=new JTextField(16);

showTime.setEditable(false);

showTime.setHorizontalAlignment(JTextField.CENTER);

showTime.setFont(new Font("楷体_GB2312",Font.BOLD,16));

JLabel hitMess=new JLabel("用鼠标单击方块",JLabel.CENTER);

hitMess.setFont(new Font("楷体_GB2312",Font.BOLD,18));

add(hitMess);

add(showTime);

setBackground(Color.cyan);

fileOneGrade=new File("初级魔板游戏排行榜.txt");///

fileTwoGrade=new File("高级魔板游戏排行榜.txt");///

}

public void setPoint(Point [][] p){

point=p;

}

public void initSpendTime(){

recordTime.stop();

spendTime=0;

showTime.setText(null);

/* File musicFile=new File("hello.wav");

URI uri=musicFile.toURI();/

URL url=uri.toURL("E:\chaper6");

AudioClip clip=Applet.newAudioClip(url);*/

}

public void setVerifySuccess(VerifySuccess verify){

this.verify=verify;

}

public void mousePressed(MouseEvent e){

recordTime.start();

clip.play();

Block block=null;

block=(Block)e.getSource();

int w=block.getBounds().width;

int h=block.getBounds().height;

int startI=-1,startJ=-1,endI=-1,endJ=-1;

Point startPoint=block.getAtPoint();

Point endPoint=null;

for(int i=0;i<point.length;i++){

for(int j=0;j<point[0].length;j++)

if(point[i][j].equals(startPoint)){

startI=i;

startJ=j;

break;

}

}

for(int i=0;i<point.length;i++){

for(int j=0;j<point[0].length;j++)

if(point[i][j].isHaveBlock()==false){

endI=i;

endJ=j;

endPoint=point[i][j];

break;

}

}

boolean moveCondition1=Math.abs(endI-startI)==1&&endJ==startJ;

boolean moveCondition2=Math.abs(endJ-startJ)==1&&endI==startI;

if(moveCondition1||moveCondition2){

block.setLocation(endPoint.getX(),endPoint.getY());

block.setAtPoint(endPoint);

endPoint.setBlock(block);

endPoint.setHaveBlock(true);

startPoint.setHaveBlock(false);

}

}

public void actionPerformed(ActionEvent e){

spendTime++;

showTime.setText("您的用时:"+spendTime+"秒");

}

public void mouseReleased(MouseEvent e){

if(verify.isSuccess()){

recordTime.stop();

record=new Record();

switch(grade){

case 1:record.setGradeFile(fileOneGrade);

break;

case 2:record.setGradeFile(fileTwoGrade);

break;

}

record.setTime(spendTime);

record.setVisible(true);

JOptionPane.showMessageDialog(this,"您成功了!","消息框",

JOptionPane.INFORMATION_MESSAGE );

/*record.setTime(spendTime);

record.setGradeFile(gradeFile);

record.setVisible(true);//记录英雄榜*/

}

}

public void mouseEntered(MouseEvent e){}

public void mouseExited(MouseEvent e){}

public void mouseClicked(MouseEvent e){

/* record.setTime(spendTime);

record.setGradeFile(gradeFile);

record.setVisible(true);//记录英雄榜*/

}

}

4. People.java

import java.io.*;

public class People implements Serializable,Comparable{

String name=null;

int time=0;

public People(String name,int t){

this.name=name;

time=t;

}

public int getTime(){

return time;

}

public String getName(){

return name;

}

public int compareTo(Object b){

People p=(People)b;

if((this.time-p.time)==0)

return 1;

else

return (this.time-p.time);

}

}

5. Point.java

public class Point{

int x,y;

boolean haveBlock;

Block  block=null;

public Point(int x,int y){

this.x=x;

this.y=y;

}

public boolean isHaveBlock(){

return haveBlock;

}

public void setHaveBlock(boolean boo){

haveBlock=boo;

}

public int getX(){

return x;

}

public int getY(){

return y;

}

public boolean equals(Point p){

if(p.getX()==this.getX()&&p.getY()==this.getY())

return true;

else

return false;

}

public void setBlock(Block block){

this.block=block;

}

public Block getBlock(){

return block;

}

}

6. PuzzleGame.java

关注“触动青年”公众号,在对话框中搜索“魔板游戏”,即可获得相关代码链接。

7. PuzzlePad.java

import javax.swing.*;

import java.io.*;

import java.util.*;

import java.awt.*;

public class PuzzlePad extends JPanel{

Point [][] point;

Block [][] block;

int distance=100,grade=1,m=3,n=3;

HandleMove handleMove;

HandleImage handleImage;

VerifySuccess verifySuccess;

Image image;

boolean isDigitPlay;

//Record record;

public PuzzlePad(){

setBackground(Color.gray);

setLayout(null);

handleMove=new HandleMove();

handleMove.initSpendTime();

handleImage=new HandleImage();

verifySuccess=new VerifySuccess();

// record=new Record();

handleMove.setVerifySuccess(verifySuccess);

}

public HandleMove getHandleMove(){

return handleMove;

}

public void setImage(Image image){

this.image=image;

}

public void setGrade(int grade){

this.grade=grade;

handleMove.grade=grade;

if(grade==1){

m=3;

n=3;

}

else if(grade==2){

m=4;

n=4;

}

}

public int getGrade(){

return grade;

}

private void needInit(){

handleMove.initSpendTime();

removeAll();

point=new Point[m][n];

block=new Block[m][n];

int Hspace=distance,Vspace=distance;

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

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

point[i][j]=new Point(Hspace,Vspace);

Hspace=Hspace+distance;

}

Hspace=distance;

Vspace=Vspace+distance;

}

handleMove.setPoint(point);

verifySuccess.setPoint(point);

handleMove.setVerifySuccess(verifySuccess);

int k=0;

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

if(i<m-1)

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

block[i][j]=new Block();

block[i][j].addMouseListener(handleMove);

k++;

}

else

for(int j=0;j<n-1;j++){

block[i][j]=new Block();

block[i][j].addMouseListener(handleMove);

k++;

}

}

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

if(i<m-1)

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

add(block[i][j]);

block[i][j].setSize(distance,distance);

block[i][j].setLocation(point[i][j].getX(),point[i][j].getY());

block[i][j].setAtPoint(point[i][j]);

point[i][j].setBlock(block[i][j]);

point[i][j].setHaveBlock(true);

}

else

for(int j=0;j<n-1;j++){

add(block[i][j]);

block[i][j].setSize(distance,distance);

block[i][j].setLocation(point[i][j].getX(),point[i][j].getY());

block[i][j].setAtPoint(point[i][j]);

point[i][j].setBlock(block[i][j]);

point[i][j].setHaveBlock(true);

}

}

}

public void setIsDigitPlay(){

needInit();

isDigitPlay=true;

ArrayList<Integer> numberList=new ArrayList<Integer>();

for(int k=0;k<m*n-1;k++){

numberList.add(k+1);

}

Object []object=numberList.toArray();

verifySuccess.setObject(object);

Collections.shuffle(numberList); //随机排列数字

int k=0;

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

if(i<m-1)

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

block[i][j].setObject(numberList.get(k));

k++;

}

else

for(int j=0;j<n-1;j++){

block[i][j].setObject(numberList.get(k));

k++;

}

}

repaint();

}

public void setIsImagePlay(){

needInit();

isDigitPlay=false;

ArrayList<Image> imageList=new ArrayList<Image>();

Image [] blockImage=handleImage.getImages(image,m,n);

for(int k=0;k<blockImage.length-1;k++){

imageList.add(blockImage[k]);

}

Object []object=imageList.toArray();

verifySuccess.setObject(object);

Collections.shuffle(imageList); //随机排列图像

int k=0;

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

if(i<m-1)

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

block[i][j].setObject(imageList.get(k));

block[i][j].repaint();

block[i][j].setBorder(null);

k++;

}

else

for(int j=0;j<n-1;j++){

block[i][j].setObject(imageList.get(k));

block[i][j].repaint();

block[i][j].setBorder(null);

k++;

}

}

repaint();

}

public void paintComponent(Graphics g){

super.paintComponent(g);

if(isDigitPlay==false)

try{

g.drawImage(image,20+distance*(m+1),point[0][0].getY(),

distance*m,distance*n,this);

}

catch(Exception exp){}

}

}

8. Record.java

import java.io.*;

import java.util.*;

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

public class Record extends JDialog implements ActionListener{

int time=0;

JTextField yourName;

JLabel label=null;

JButton enter,cancel;

File gradeFile=null;

public Record(){

setBounds(100,50,550,380);

setResizable(false);

setModal(true);

setVisible(false);

enter=new JButton("确定");

cancel=new JButton("取消");

yourName=new JTextField(8);

yourName.setText("匿名");

enter.addActionListener(this);

cancel.addActionListener(this);

setLayout(new GridLayout(2,1));

label=new JLabel();

add(label);

JPanel p=new JPanel();

p.add(yourName);

p.add(enter);

p.add(cancel);

add(p);

}

public void setGradeFile(File f){

gradeFile=f;

setTitle("保存成绩到"+gradeFile.getName());

label.setText("保存成绩到"+gradeFile.getName());

validate();

}

public void setTime(int time){

this.time=time;

}

public void actionPerformed(ActionEvent e){

if(e.getSource()==enter){

LinkedList<People> list=new LinkedList<People>();

try{

RandomAccessFile out=new RandomAccessFile(gradeFile,"rw");

out.seek(out.length());

out.writeUTF(yourName.getText());

out.writeInt(time);

out.close();

}

catch(Exception event) {

System.out.println("error");///

}

setVisible(false);

}

if(e.getSource()==cancel){

setVisible(false);

}

}

}

9. ShowRecordDialog.Java

关注“触动青年”公众号,在对话框中搜索“魔板游戏”,即可获得相关代码链接。

10. VerifySuccess.java

public class VerifySuccess{

Point [][] point;

Object [] object;

public void setPoint(Point [][] point){

this.point=point;

}

public void setObject(Object [] object){

this.object=object;

}

public boolean isSuccess(){

boolean boo=true;

int k=0;

for(int i=0;i<point.length;i++){

if(i<point.length-1){

for(int j=0;j<point[i].length;j++){

if(!(point[i][j].getBlock().getObject()==object[k])){

boo=false;

break;

}

k++;

}

}

else{

for(int j=0;j<point[i].length-1;j++){

if(!(point[i][j].getBlock().getObject()==object[k])){

boo=false;

break;

}

k++;

}

}

}

return boo;

}

}

java课程设计(第三版)魔板游戏源代码(可实现英雄榜功能)相关推荐

  1. Java课程设计(2020版)

    目录 参考资料 一. 题目选择说明 1. 传统题目 2. 综合性题目(有一定挑战性.有趣.实用) 2.1题目特点: 2.2 常见类库与技术参考资料 2.2.1 jsoup 2.2.2 HttpComp ...

  2. 大一 Java 课程设计实践 - 迷你版画图板(附源代码和设计文档)

    我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. 文章目 ...

  3. 疯狂java讲义(第三版-李刚) 源代码 光盘

    蓝奏云直接下载(推荐) 蓝奏云扫码下载

  4. Java课程设计——象棋(201521123042 姚佳希)

    1. 团队课程设计博客链接 Java课程设计(团队版) 2 个人负责模块或任务说明 ChessBoard类创建棋盘及界面. ChessPoint类创建棋盘格点及界面. ChessPiece类创建棋子及 ...

  5. java51游戏_Java作业实践(一)魔板游戏

    课题:魔板游戏 一.课设要求 1.基本功能 (1)游戏规则 一个3×3的魔板,有一个格子是空的,其他格子内随机放置1-8共8个编号的方块,通过单击任意一个与空格子相邻的方块可以把该方块移入空格子,不断 ...

  6. 斗地主Java课程设计_JAVA面向对象编程课程设计——web版斗地主

    一.团队课程设计博客链接 二.个人负责模块或任务说明 实体类的设计 斗地主规则的实现 人机自动出牌的算法 实现数据库的DAO模式 三.自己的代码提交记录 注:这里只有部分提交记录,详细的提交记录在团队 ...

  7. Java课程设计报告--绩效考核信息管理系统

     Java课程设计报告 题目      绩效考核信息管理系统    学生姓名         学    号                   院    系        年级专业计算机科学与技术 班 ...

  8. java 课程设计文本编辑器,JAVA课程设计--文本编辑器

    JAVA课程设计--文本编辑器 Java 语言课程期末作业 1 Java 语言课程期末作业 题 目 第 8 题,文本编辑器 学 院 计算机学院 专 业 计算机科学与技术 班 别 学 号 姓 名 201 ...

  9. 华北科技学院java考试题_华北科技学院java课程设计报告简易计算器

    华北科技学院java课程设计报告简易计算器 华北科技学院计算机系综合性实验 实 验 报 告 课程名称 Java程序设计B 实验学期 2011 至 2012 学年 第 1 学期 学生所在系部 计算机学院 ...

最新文章

  1. 第一代电子计算机诞生的国家是( ),计算机基础知识习题.doc
  2. 如何避免让微服务测试成为研发团队最大的瓶颈?
  3. 数据包skb_buf(SKB才是套接字的缓冲区)
  4. Sublime Text 无法使用Package Control或插件安装失败的解决方法【转】
  5. [BUUCTF-pwn]——cmcc_simplerop (ropchain)
  6. 2016年计算机应用基础在线作业答案,2016电子科技大学计算机应用基础专科在线作业1...
  7. shell 函数定义和调用
  8. 云服务器带宽如何计算,云服务器怎么选择带宽
  9. Perl学习笔记(六)--文件(一)
  10. hive 如何将数组转成字符串_Hive函数大全(含例子)之字符串函数(String Functions)...
  11. 2021-2022年度第三届全国大学生算法设计与编程挑战赛(冬季赛)-正式赛 部分题解
  12. ARM:单芯片搞定4K H.265编解码 全球第一!
  13. CF1190E Tokitsukaze and Explosion 二分、贪心、倍增、ST表
  14. Git Push,Pull,Clone出现SSL certificate problem: unable to get local issuer certificate
  15. 简单的STM32汇编程序
  16. echarts--迁徙图
  17. 深度学习面试题之LSTM补充
  18. 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——1.2 微信公众账号注册...
  19. DAP可视化组件升级开发说明
  20. OM | 浅谈收益管理与动态定价

热门文章

  1. 怎么正确清理苹果产品上的脏东西,超详细教程!
  2. Silverlight闹钟
  3. linux系统下的归档与压缩
  4. php 代付测试demo,php – 2checkout测试支付模拟
  5. win10双系统改名
  6. 技术干货实践:如何在树莓派模拟运行陀螺仪扫地机
  7. 骑马与砍杀是用python编的_哇咔咔工作室:py基础教程贴
  8. 新国标插座插排究竟有哪些规定?盘点那些被我们忽略的安全知识
  9. 揭秘:保养品包装有玄机 玻璃材质最安全
  10. 冰与火之歌:2017年进口跨境电商行业报告(进口篇)