import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.border.*;
/**
* @author ellen
* 2048小游戏
*
*/
public class Test extends JApplet{
private static final int UP=0,DOWN=1,LEFT=2,RIGHT=3;
private static final int WID=150,SP=10;
private int scores=0;
private static JLabel scoreLabel;
private boolean change,CheckMode=false,gameOverFlag=false,successFlag=false;
private int[] label={2,4,8,16,32,64,128};
private Color[] clo={
new Color(200,200,200),new Color(228,228,160),new Color(214,163,92),
new Color(234,124,72),new Color(240,84,77),new Color(255,68,53),new Color(200,200,64)
};
private Map cmap=new HashMap();
public static RectObject[][] rset=new RectObject[4][4];
public RectObject[][] list=new RectObject[4][4];
private My2048Panel myp;
private LinkedList saveList=new LinkedList();
private JButton goBackButton;
KeyListener kl=new KeyListener(){
public void keyPressed(KeyEvent e){
saveTheStep();
goBackButton.setVisible(true);
if(gameOverFlag==true){
return;
}
if(!aDirAble()){
gameOver();
}
int key=e.getKeyCode();
switch(key){
case KeyEvent.VK_UP:
change=false;
moveUp(true);
if(change==true){
getARandomRect();
//saveTheStep();
}
break;
case KeyEvent.VK_DOWN:
change=false;
moveDown(true);
if(change==true){
getARandomRect();
//saveTheStep();
}
break;
case KeyEvent.VK_LEFT:
change=false;
moveLeft(true);
if(change==true){
getARandomRect();
//saveTheStep();
}
break;
case KeyEvent.VK_RIGHT:
change=false;
moveRight(true);
if(change==true){
getARandomRect();
//saveTheStep();
}
break;
}
//saveTheStep();
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
};
class RectObject{
private int value;
public RectObject(){
value=0;
}
public RectObject(RectObject obj){
value=obj.value;
}
public boolean equals(Object inobj){
RectObject obj=(RectObject)inobj;
if(obj.value==value){
return true;
}
return false;
}
}
class Point{
int x;
int y;
public Point(int i,int j){
x=i;
y=j;
}
}
class My2048Panel extends JPanel{
private int[] xindex={SP,2*SP+WID,3*SP+2*WID,4*SP+3*WID};
private int[] yindex={SP,2*SP+WID,3*SP+2*WID,4*SP+3*WID};
public void paintComponent(Graphics g){
//background
super.paintComponent(g);
for(int i=0;i<xindex.length;i++){
for(int j=0;j<yindex.length;j++){
g.setColor(Color.WHITE);
g.drawRoundRect(xindex[i], yindex[j], WID, WID, WID/5, WID/5);
g.setColor(new Color(197,183,129));
g.fillRoundRect(xindex[i], yindex[j], WID, WID, WID/5, WID/5);
}
}
//paint rectangle
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(rset[i][j]!=null){
g.setColor(Color.WHITE);
g.drawRoundRect(yindex[j], xindex[i], WID, WID, WID/5, WID/5);
if(rset[i][j].value<128){
g.setColor((Color)cmap.get(rset[i][j].value));
}else{
g.setColor((Color)cmap.get(128));
}
g.fillRoundRect(yindex[j], xindex[i], WID, WID, WID/5, WID/5);
g.setColor(Color.BLACK);
Font font=new Font("TimesRoman",Font.BOLD,50);
g.setFont(font);
FontMetrics fm=Toolkit.getDefaultToolkit().getFontMetrics(font);
int len=fm.stringWidth(""+rset[i][j].value);
int hg=fm.getHeight();
g.drawString(""+rset[i][j].value, yindex[j]+WID/2-len/2, xindex[i]+WID/2+hg/4);
if(rset[i][j].value==2048 && successFlag==false){
successFlag=true;
gameSuccess();
}
}
}
}
}
}
class GameOverPane extends JPanel{
public GameOverPane(int w,int h){
setSize(w,h);
//setOpaque(false);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Font font=new Font("TimesRoman",Font.BOLD,80);
g.setFont(font);
FontMetrics fm=Toolkit.getDefaultToolkit().getFontMetrics(font);
int width=fm.stringWidth("Game Over");
int height=fm.getHeight();
g.setColor(new Color(255,0,0));
g.drawString("Game Over!", getWidth()/2-width/2, getHeight()/2-height/2);
}
}
class SuccessPane extends JPanel{
public SuccessPane(int w,int h){
setSize(w,h);
//setOpaque(false);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Font font=new Font("TimesRoman",Font.BOLD,80);
g.setFont(font);
FontMetrics fm=Toolkit.getDefaultToolkit().getFontMetrics(font);
int width=fm.stringWidth("Success!");
int height=fm.getHeight();
g.setColor(new Color(255,0,0));
g.drawString("Success!", getWidth()/2-width/2, getHeight()/2-height/2);
}
}
class LOGO extends JPanel{
public LOGO(int w ,int h){
setSize(w,h);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Font font=new Font("TimesRoman",Font.BOLD,60);
g.setFont(font);
FontMetrics fm=Toolkit.getDefaultToolkit().getFontMetrics(font);
int width=fm.stringWidth("2048");
int height=fm.getHeight();
g.setColor(new Color(255,0,0));
g.drawString("2048", 20, getHeight()/2+20);
}
}
public class goBackListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if(saveList.size()==0){
goBackButton.setVisible(false);
return;
}
ArrayList arr=(ArrayList)saveList.getLast();
scoreLabel.setText(""+arr.get(0));
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
int num=(int)arr.get(4*i+j+1);
if(num!=0){
rset[i][j]=new RectObject();
rset[i][j].value=num;
}else{
rset[i][j]=null;
}
}
}
saveList.removeLast();
repaint();
}
}
public class resetListener implements ActionListener{
public void actionPerformed(ActionEvent e){
refreshBest();
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
rset[i][j]=null;
}
}
scoreLabel.setText("0");
repaint();
getARandomRect();
getARandomRect();
}
}
//the applet init
public void init(){
Container cp=getContentPane();
cp.setLayout(null);
cp.setFocusable(true);
cp.addKeyListener(kl);
Font font=new Font("TimesNewman",Font.BOLD,30);
JLabel sl=new JLabel();
sl.setLayout(new GridLayout(2,1));
JLabel sllb=new JLabel("Scores");
sllb.setFont(font);
scoreLabel=new JLabel("0");
scoreLabel.setFont(font);
sl.add(sllb);
sl.add(scoreLabel);
int best=0;
try{
File file=new File("BestRecord");
if(file.exists()){
RandomAccessFile f=new RandomAccessFile(file,"rw");
best=f.readInt();
f.close();
}
}catch(FileNotFoundException e){
best=0;
e.printStackTrace();
}catch(IOException e){
best=0;
e.printStackTrace();
}
JLabel bsl=new JLabel();
bsl.setLayout(new GridLayout(2,1));
JLabel jl=new JLabel("Best");
jl.setFont(font);
JLabel jl1=new JLabel(""+best);
jl1.setFont(font);
bsl.add(jl);
bsl.add(jl1);
myp=new My2048Panel();
LOGO logo=new LOGO(0,0);
goBackButton=new JButton("UNDO");
goBackButton.setFont(font);
goBackButton.addActionListener(new goBackListener());
goBackButton.addKeyListener(kl);
JButton jb=new JButton("RESET");
jb.setFont(font);
jb.addActionListener(new resetListener());
jb.addKeyListener(kl);
sl.setBounds(500,20,200,80);
bsl.setBounds(300,20,200,80);
logo.setBounds(0, 0, 600, 100);
myp.setBounds(0,90,700,700);
goBackButton.setBounds(700,250,150,60);
jb.setBounds(700,450,150,60);
cp.add(sl);
cp.add(bsl);
cp.add(logo);
cp.add(myp);
cp.add(goBackButton);
cp.add(jb);
File f=new File("LASTRECORD");
if(f.exists()){
try{
RandomAccessFile file=new RandomAccessFile(f,"rw");
int num=file.readInt();
scoreLabel.setText(""+num);
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
num=file.readInt();
if(num!=0){
rset[i][j]=new RectObject();
rset[i][j].value=num;
}
}
}
file.close();
}catch(FileNotFoundException e)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计
资源推荐
资源详情
资源评论
收起资源包目录
Java实现的6个常见小游戏,可用于个人java学习.zip (18个子文件)
project_code_0719
Gobang
Gobang.java 11KB
SnakeDemo
DrawView.java 2KB
SnakeGameView.java 4KB
Node.java 434B
GameControl.java 1KB
Snake.java 3KB
GameRunThread.java 640B
2048
Test.java 16KB
Airplane
FlyingObject.java 2KB
Airplane.java 724B
Hero.java 3KB
Bullet.java 483B
Bee.java 1KB
ShootGame.java 13KB
Enemy.java 114B
Award.java 186B
MazeDemo
MazeDemo.java 4KB
三子棋
ChessDemo.java 4KB
共 18 条
- 1
资源评论
辣椒种子
- 粉丝: 3414
- 资源: 5723
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 本科毕业设计基于C# wpf人脸识别的考勤系统的设计与实现源码.zip
- 基于Ruoyi+uniapp实现学生考勤系统 学生考勤源码+项目说明.zip
- feae6bc968ca68a099455d8b8a8dea35
- 基于Pytorch训练CIRAR10上分类算法.zip
- Pytorch-pytorch深度学习教程之Tensorboard.zip
- 基于C++和Python开发yolov8-face作为人脸检测器dlib作为人脸识别器的人脸考勤系统源码+项目说明.zip
- Pytorch-pytorch深度学习教程之变分自动编码器.zip
- Pytorch-pytorch深度学习教程之神经风格迁移.zip
- Pytorch-pytorch深度学习教程之深度残差网络.zip
- Pytorch-pytorch深度学习教程之循环神经网络.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功