java实现窗口小游戏2048 初始版

您所在的位置:网站首页 java小游戏怎么运行 java实现窗口小游戏2048 初始版

java实现窗口小游戏2048 初始版

2024-07-11 08:03| 来源: 网络整理| 查看: 265

1、窗口化 2、2048游戏可正常运行 3、可以显示分数 4、直接处于src下 5、因为此程序涉及数据库,修改了点,把有关数据库的内容进行了删除或者注释

//主函数 public class userPlay { public static void main(String[] args) {//主函数 //游戏窗口 new initWindow(); } }

//游戏窗口 初始界面 随机出现一个数字 在这里插入图片描述 在这里插入图片描述

import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.Random; import java.util.Timer; import javax.swing.*; public class initWindow extends JFrame implements ActionListener , KeyListener { //游戏结束之后输入名字 JTextField name=new JTextField(); boolean isExists;//是否开始了 JButton restart=new JButton("重新开始"); JButton confirm=new JButton("确定"); //方格数目为 number*number static int number=4; int Number[][]=new int[number][number];//定义一个四行四列的数字数组 int localx[][]=new int[number][number];//x位置 int localy[][]=new int[number][number];//y位置 int oldNumber[][]=new int[number][number];//之前的 public initWindow() {//构造方法 init();//初始化 setSize(800, 800);//窗口大小 setVisible(true);//显示窗口可见 setResizable(false);//不可扩大 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击右上角直接关闭程序 setTitle("2048小游戏");//设置标题 this.addKeyListener(this);//添加键盘事件 this.setFocusable(true);//获取焦点 validate(); } public void init(){ setLayout(null);//布局 add(name);//加入布局---加入这个窗口中 add(confirm);//加入布局 add(restart); restart.setBounds(300,675,200,50);//设置位置和大小 restart.addActionListener(this);//添加事件 restart.setFont(new Font("华文楷体",1,30));//设置字体大小和样式 restart.setBackground(Color.GREEN);//设置背景颜色 //存储文字显示的位置 for (int i = 0; i < number; i++) { for (int j = 0; j < number; j++) { localx[j][i]=100+150*i+65; localy[j][i]=50+150*j+75; } } //初始随机数字 里面的是随机数字的数字 rollNum(2);//刚开始的时候是出现两个数字,之后每次运动后随机出一个数字 common();//把旧的复制为新的---为了让新随机出现的数字和以前数字隔离出来 isExists=true;//游戏开始 } public void paint(Graphics g) { super.paint(g);//如果没有这个,图像不会重新绘制 if(!isExists){//游戏结束 name.setBounds(200, 500, 200, 50); name.setFont(new Font("华文行楷",1,30)); g.setFont(new Font("华文楷体", 1, 50)); g.setColor(Color.black); g.setFont(new Font("华文楷体", 1, 30)); g.drawString("输入你的昵称(确定之后不可更改):",200 ,500 ); //设置按钮大小 confirm.setBounds(400,500,100,50); //统计分数----窗口上出现的所有数字之和 int fs=0; for (int i = 0; i < number; i++) { for (int j = 0; j < number; j++) { fs+=Number[i][j]; } } //点击确定之后 String finalFs = String.valueOf(fs);//把分数转为字符形式 confirm.addActionListener(new ActionListener() {//确定名字之后执行 @Override public void actionPerformed(ActionEvent e) { //下面的为数据库操作 /* String sql=null; if(name.getText().equals("")){ JOptionPane.showMessageDialog(null, "名字都补数!", "",JOptionPane.PLAIN_MESSAGE); return; } sql="insert into game_2048 values('"+name.getText()+"','"+finalFs+"')"; if(gamedatabase.Insertdata(sql)) JOptionPane.showMessageDialog(null, "存储成功!", "",JOptionPane.PLAIN_MESSAGE); else JOptionPane.showMessageDialog(null, "存储失败!", "",JOptionPane.PLAIN_MESSAGE); } */ }); =============================================================== g.setFont(new Font("华文楷体", 1, 50)); g.setColor(Color.RED); g.drawString("你的分数为:"+finalFs ,200 ,300 ); } else { Graphics2D g2 = (Graphics2D) g; //g是Graphics对象 g2.setStroke(new BasicStroke(10.0f));//设置线条宽度 g2.setColor(new Color(255, 245, 170));//设置字体颜色 for (int i = 0; i < number + 1; i++) {//用线条画出图形面板 g2.drawLine(100 + 150 * i, 50, 100 + 150 * i, 50 + 600); g2.drawLine(100, 50 + 150 * i, 100 + 600, 50 + 150 * i); } g.setFont(new Font("华文楷体", 1, 30)); g.setColor(Color.BLUE); for (int i = 0; i < number; i++) {//把所有的数字显示出来 for (int j = 0; j < number; j++) { if (Number[i][j] == 0) {//为空的话 //覆盖掉数字 g.drawString(" ", localx[i][j], localy[i][j]); } else { //显示数字 if (oldNumber[i][j] != Number[i][j]) { g.setColor(Color.red); g.setFont(new Font("华文楷体", 3, 40)); g.drawString(String.valueOf(Number[i][j]), localx[i][j], localy[i][j]); g.setColor(Color.blue); g.setFont(new Font("华文楷体", 1, 30)); } else { g.drawString(String.valueOf(Number[i][j]), localx[i][j], localy[i][j]); } } } } } } /* * 开始随机出现数字*/ public void rollNum( int num){ int k=0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if(Number[i][j]==0){ ++k; } } } if(k==0){ isExists=false;//结束 //弹出框提示 JOptionPane.showMessageDialog(this, "要加油啊!", "你失败了",JOptionPane.PLAIN_MESSAGE); return; } Random random = new Random(); for (int i = 0; i < num;) { int x = random.nextInt(4);//从0-3中随机选择 int y = random.nextInt(4); if(Number[x][y]==0){//等于空的时候---- 这个位置上没有数字 if(random.nextInt(2)==0){//随机数字为2 or 4 Number[x][y] = 2; } else{ Number[x][y] = 4; } i++; } } } @Override public void actionPerformed(ActionEvent e) { dispose(); //关掉窗口 new initWindow();//重新打开一个 } @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { //上下左右---1-4 int keyCode = e.getKeyCode(); if(isExists) {//游戏进行中 if (keyCode == KeyEvent.VK_UP) {//上 go(1); } if (keyCode == KeyEvent.VK_DOWN) {//下 go(2); } if (keyCode == KeyEvent.VK_LEFT) {//左 go(3); } if (keyCode == KeyEvent.VK_RIGHT) {右箭头 go(4); } } } @Override public void keyReleased(KeyEvent e) { } /* * 移动位置*/ public void go(int num){ //上下左右---1-4 int sz[]=new int[4];//设置一个一维数组 if(num==1){ for(int i=0;i=0 ; j--) { sz[number - j - 1]=Number[j][i];//把需要移动的方格按照移动方向存进数组 //如:一维数组每次移动都是从左到右 //所以按了上箭头之后,移动便是从下到上,依次从上到下复制到从左到有 } for (int j = 0; j < 4; j++) { } //移动中 goes(sz); //移动后 for (int j = number -1 ; j >=0 ; j--) {//移动好的复制回去 Number[j][i]=sz[number - j - 1]; } } }else if(num==2){ for(int i=0;i=0 ; j--) { sz[number - j - 1]=Number[i][j]; } goes(sz);; for (int j = number-1; j >=0 ; j--) { Number[i][j]= sz[number - j - 1]; } } }else{ for(int i=0;i= 0; i--) { if(sz[i]!=0){ if(sz[goNum]!=0){ //相等即相加 if(sz[goNum]==sz[i] && ising==false){ sz[goNum]+=sz[i]; sz[i]=0; ising=true; } else { goNum--; if(goNum!=i) { sz[goNum] = sz[i]; sz[i] = 0; } ising=false; } } else{ if(goNum!=i) { sz[goNum] += sz[i]; sz[i] = 0; } } } } } public void common(){ for (int i = 0; i < number; i++) { for (int j = 0; j < number; j++) { oldNumber[i][j]=Number[i][j]; } } } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3