java课程设计(第三版)魔板游戏源代码(可实现英雄榜功能)
有两种玩法(数字和图片)、可选择初级和高级模式、可查看英雄榜。
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课程设计(第三版)魔板游戏源代码(可实现英雄榜功能)相关推荐
- Java课程设计(2020版)
目录 参考资料 一. 题目选择说明 1. 传统题目 2. 综合性题目(有一定挑战性.有趣.实用) 2.1题目特点: 2.2 常见类库与技术参考资料 2.2.1 jsoup 2.2.2 HttpComp ...
- 大一 Java 课程设计实践 - 迷你版画图板(附源代码和设计文档)
我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. 文章目 ...
- 疯狂java讲义(第三版-李刚) 源代码 光盘
蓝奏云直接下载(推荐) 蓝奏云扫码下载
- Java课程设计——象棋(201521123042 姚佳希)
1. 团队课程设计博客链接 Java课程设计(团队版) 2 个人负责模块或任务说明 ChessBoard类创建棋盘及界面. ChessPoint类创建棋盘格点及界面. ChessPiece类创建棋子及 ...
- java51游戏_Java作业实践(一)魔板游戏
课题:魔板游戏 一.课设要求 1.基本功能 (1)游戏规则 一个3×3的魔板,有一个格子是空的,其他格子内随机放置1-8共8个编号的方块,通过单击任意一个与空格子相邻的方块可以把该方块移入空格子,不断 ...
- 斗地主Java课程设计_JAVA面向对象编程课程设计——web版斗地主
一.团队课程设计博客链接 二.个人负责模块或任务说明 实体类的设计 斗地主规则的实现 人机自动出牌的算法 实现数据库的DAO模式 三.自己的代码提交记录 注:这里只有部分提交记录,详细的提交记录在团队 ...
- Java课程设计报告--绩效考核信息管理系统
Java课程设计报告 题目 绩效考核信息管理系统 学生姓名 学 号 院 系 年级专业计算机科学与技术 班 ...
- java 课程设计文本编辑器,JAVA课程设计--文本编辑器
JAVA课程设计--文本编辑器 Java 语言课程期末作业 1 Java 语言课程期末作业 题 目 第 8 题,文本编辑器 学 院 计算机学院 专 业 计算机科学与技术 班 别 学 号 姓 名 201 ...
- 华北科技学院java考试题_华北科技学院java课程设计报告简易计算器
华北科技学院java课程设计报告简易计算器 华北科技学院计算机系综合性实验 实 验 报 告 课程名称 Java程序设计B 实验学期 2011 至 2012 学年 第 1 学期 学生所在系部 计算机学院 ...
最新文章
- 第一代电子计算机诞生的国家是( ),计算机基础知识习题.doc
- 如何避免让微服务测试成为研发团队最大的瓶颈?
- 数据包skb_buf(SKB才是套接字的缓冲区)
- Sublime Text 无法使用Package Control或插件安装失败的解决方法【转】
- [BUUCTF-pwn]——cmcc_simplerop (ropchain)
- 2016年计算机应用基础在线作业答案,2016电子科技大学计算机应用基础专科在线作业1...
- shell 函数定义和调用
- 云服务器带宽如何计算,云服务器怎么选择带宽
- Perl学习笔记(六)--文件(一)
- hive 如何将数组转成字符串_Hive函数大全(含例子)之字符串函数(String Functions)...
- 2021-2022年度第三届全国大学生算法设计与编程挑战赛(冬季赛)-正式赛 部分题解
- ARM:单芯片搞定4K H.265编解码 全球第一!
- CF1190E Tokitsukaze and Explosion 二分、贪心、倍增、ST表
- Git Push,Pull,Clone出现SSL certificate problem: unable to get local issuer certificate
- 简单的STM32汇编程序
- echarts--迁徙图
- 深度学习面试题之LSTM补充
- 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——1.2 微信公众账号注册...
- DAP可视化组件升级开发说明
- OM | 浅谈收益管理与动态定价