




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA程序课程实训报告题目: 学号: 姓名: 班级: 2048小游戏(一)程序介绍2048是一款益智小游戏,玩家需要在16个格子中通过数字叠加的方法将最初的数字2凑成数字2048。有16个格子,初始时会有两个格子上安放了两个数字2,每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方随即出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。2048是比较流行的一款数字游戏。本课程设计通过设计与开发JVM平台上的2048游戏,进一步掌握所学Java课程的知识,体验Java的跨平台性,同时将Java设计方面的知识拓展应用(二)功能需求描述1、图形用户界面:2048的最大特点就是玩家对图形界面里的数字进行操作,也就是是玩家与游戏的互动2、当前分数SCORE与最高分数的显示:在我们设计的2048游戏中当前分数取了页面内所有数字相加的值为分数,对玩家玩游戏的进展有直接性、客观性的展现;同时,最高分数取了以往玩家退出游戏时所保存分数的最高分3、数字颜色:游戏中数字的颜色以2为首项的等比数列变化,即2、4、8、16、32、64、128、256、512、1024、2048.对应的数字卡片变色4、游戏的退出:游戏退出时,我们采用弹出对话框的确认玩家是否真的要退出游戏,当然这样做更符合游戏人性化设计的观念。(三)玩法技巧:1、最大数尽可能放在角落。2、数字按顺序紧邻排列。3、首先满足最大数和次大数在的那一列/行是满的。4、时刻注意活动较大数旁边要有相近的数。5、以大数所在的一行为主要移动方向6、不要急于“清理桌面”(四)程序说明一个类Copy2048继承JFrame,类中包括,一个构造方法Copy2048,构造方法中设定游戏界面的大小,背景颜色,边框,字体,标签,布局,位置,记录剩余空方块数目,记录分数,用于判断游戏是否失败,用于判断游戏是否失败,设置字体类型和大小,为最高分标签添加按键监听器,一个KeyEvent按键事件,构造方法中创建游戏主面板,设置主面板位置尺寸,设置空布局,创建文本框二维数组,创建标签,调用时间处理方法,一个Create2方法,是在随机位置产生一个2号方块的方法,l1到l4同时被键盘赋值为1说明任何方向键都不能产生新的数字2,那就说明游戏失败GAMEOVER !一个setColor方法,是为了产生2048小游戏方块的颜色。(五)程序结构1.重新开始,若是初次运行游戏,则从文件中读入最高分 void restart() 2.控制方法 public void keyPressed(KeyEvent e) 3.绘图方法 public void paint(Graphics g) 4.判断是否已经失败,若失败则返回true,否则返回false public boolean judgeFail() 5.向下滑动,若各列均没有方块相消或移动,则返回false,否则返回true; public void moveDown() 6.向左滑动,若各行均没有方块相消或移动,则返回false,否则返回true; public void moveLeft() 7.向右滑动,若各行均没有方块相消或移动,则返回false,否则返回true; public void moveRight()8.向上滑动,若各行均没有方块相消或移动,则返回false,否则返回true;Public void moveUp() 9.在游戏区空闲处随机生成2 public void generateRandom2 ()(六)游戏截图(七)程序代码import java.awt.Color;import java.awt.EventQueue;import java.awt.BorderLayout;import java.awt.FlowLayout;import java.awt.Font;import java.awt.event.*;import java.util.Random;import javax.swing.BorderFactory;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.SwingConstants;import javax.swing.border.*;import javax.swing.JTextField;public class Copy2048 extends JFrameprivate JPanel scoresPane;private JPanel mainPane;private JLabel labelMaxScores ;private JLabel labelScores;private JLabel tips;/提示操作标签private JTextField textMaxScores;private JLabel textScores;private JLabel texts;private Icon icon2;private int times = 16;/记录剩余空方块数目private int scores = 0;/记录分数private int l1,l2,l3,l4,l5;/用于判断游戏是否失败Font font = new Font(, Font.BOLD,14);/设置字体类型和大小Font font2 = new Font(, Font.BOLD,30); /设置字体类型和大小Random random = new Random(); /随机类实例化public static void main(String args)EventQueue.invokeLater(new Runnable()public void run()tryCopy2048 frame = new Copy2048();frame.setVisible(true);catch(Exception e1)e1.printStackTrace(););/* * 构造方法 */public Copy2048()super();setResizable(false);/禁止调整窗体大小getContentPane().setLayout(null);/设置空布局setBounds(500, 50, 500, 615);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setTitle(2048PC版);/设置窗体标题scoresPane = new JPanel();/创建分数显示面板scoresPane.setBackground(Color.green);/设置分数显示面板的背景色scoresPane.setBounds(20, 20, 460, 40);scoresPane.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.YELLOW);/设置得分面板的边框getContentPane().add(scoresPane);/将得分面板添加到窗体scoresPane.setLayout(null);/设置面板空布局labelMaxScores = new JLabel(最高分:);/最高分标签labelMaxScores.setFont(font);/设置字体类型和大小labelMaxScores.setBounds(10, 5, 50, 30);/设置最懂啊分标签的位置尺寸scoresPane.add(labelMaxScores);/将最高分标签添加到得分容器中textMaxScores = new JTextField( );/得分标签textMaxScores.setBounds(60, 5, 150, 30);textMaxScores.setFont(font);textMaxScores.setEditable(false);scoresPane.add(textMaxScores);/将得分标签添加到分数面板中labelScores = new JLabel(得 分:);labelScores.setFont(font);/设置字体类型和大小labelScores.setBounds(240, 5, 50, 30);scoresPane.add(labelScores);textScores = new JLabel(String.valueOf(scores);textScores.setFont(font);textScores.setBounds(290, 5, 150, 30);scoresPane.add(textScores);mainPane = new JPanel();/创建游戏主面板mainPane.setBounds(20, 70, 460, 500);/设置主面板位置尺寸this.getContentPane().add(mainPane);mainPane.setLayout(null);/设置空布局texts = new JLabel44;/创建文本框二维数组for(int i = 0; i 4; i+)/遍历数组for(int j = 0; j 4; j+)textsij = new JLabel();/创建标签textsij.setFont(font2);textsij.setHorizontalAlignment(SwingConstants.CENTER);textsij.setText();textsij.setBounds(120 * j, 120 * i, 100, 100);/设置方块的大小位置setColor(i, j, );textsij.setOpaque(true);textsij.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.green);/设置方块边框颜色mainPane.add(textsij);/将创建的文本框放在tips = new JLabel(Tips:使用上、下、左、右键或者W、S、A、D键控制);tips.setFont(font);tips.setBounds(60,480,400,20);mainPane.add(tips);textMaxScores.addKeyListener(new KeyAdapter()/为最高分标签添加按键监听器public void keyPressed( KeyEvent e) do_label_keyPressed(e);/调用时间处理方法);Create2();Create2();/* * 按键输入事件的处理方法 * param e */protected void do_label_keyPressed(final KeyEvent e)int code = e.getKeyCode();/获取按键代码int a ;/a 的引入是为了防止连加的情况出现String str ;String str1;int num;switch(code)case KeyEvent.VK_LEFT:case KeyEvent.VK_A:/如果按键代码是左方向键或者A键for(int i = 0; i 4; i+)a = 5;for(int k = 0; k 3; k+)for(int j = 1; j 4; j+)/遍历16个方块str = textsij.getText();/获取当前方块标签文本字符str1 = textsij-1.getText();/获取当前左1方块标签文本字符if(pareTo() = 0)/如果左1方块文本为空字符textsij-1.setText(str);/字符左移setColor(i, j-1,str);textsij.setText();/当前方块字符置空setColor(i, j, );else if(pareTo(str1) = 0) & (j !=a) & (j != a-1)/如果当前方块和左1方块文本字符相等num = Integer.parseInt(str);scores += num;times +;str = String.valueOf(2 * num);textsij-1.setText(str);/左1方块文本字符变为两方块之和setColor(i, j-1, str);textsij.setText();/当前方块字符置空setColor(i, j, );a = j;l1 = 1;/用于判断游戏是否失败Create2();break;case KeyEvent.VK_RIGHT:case KeyEvent.VK_D:for(int i = 0; i 4; i +)a = 5;for(int k = 0; k = 0; j-)str = textsij.getText();str1 = textsij + 1.getText();if(pareTo() = 0)textsij + 1.setText(str);setColor(i, j+1, str);textsij.setText();setColor(i, j, );else if(pareTo(str1) = 0 & j !=a & j != a+ 1)num = Integer.parseInt(str);scores += num ;times +;str = String.valueOf(2 * num);textsij + 1.setText(str);setColor(i, j+1, str);textsij.setText();setColor(i, j, );a = j;l2 = 1;Create2();break;case KeyEvent.VK_UP:case KeyEvent.VK_W:for(int j = 0; j 4; j+)a = 5;for(int k = 0; k 3; k+)for(int i = 1; i 4; i+)str = textsij.getText();str1 = textsi - 1j.getText();if(pareTo() = 0)textsi - 1j.setText(str);setColor(i-1, j, str);textsij.setText();setColor(i, j, );else if(pareTo(str1) = 0 & i != a & i != a -1)num = Integer.parseInt(str);scores += num ;times +;str = String.valueOf(2 * num);textsi - 1j.setText(str);setColor(i-1, j, str);textsij.setText();setColor(i, j, );a = i;l3 =1;Create2();break;case KeyEvent.VK_DOWN:case KeyEvent.VK_S:for(int j = 0; j 4; j +)a = 5;for(int k = 0; k = 0; i-)str = textsij.getText();str1 = textsi + 1j.getText();if(pareTo() = 0)textsi + 1j.setText(str);setColor(i+1, j, str);textsij.setText();setColor(i, j, );else if(pareTo(str1) = 0 & i != a & i != a + 1)num = Integer.parseInt(str);scores += num ;times +;str = String.valueOf(2 * num);textsi + 1j.setText(str );setColor(i+1, j, str);textsij.setText();setColor(i, j, );a = i;l4 = 1;Create2();break;default:break;textScores.setText(String.valueOf(scores);/* * 在随机位置产生一个2号方块的方法 * param i,j */public void Create2()int i ,j;boolean r = false;String str;if(times 0)while(!r)i = random.nextInt(4);j = random.nextInt(4);str = textsij.getText();if(pareTo() = 0)textsij.setIcon(icon2);textsij.setText(2);setColor(i, j, 2);times -;r = true;l1 = l2 = l3 = l4 = 0;else if(l1 0 & l2 0 & l3 0 & l4 0)/l1到l4同时被键盘赋值为1说明任何方向键都不能产生新的数字2,说明游戏失败tips.setText( GAMEOVER !);/* * 设置标签颜色 * param i , j ,str */public void setColor(int i, int j, String str)if(str=2) textsij.setBackground(Color.yellow);else if(str=4)textsij.setBackground(Color.red);else if(str=8)textsij.setBackground(Color.pink);else if(str=16)textsij.setBackground(Color.orange);else if(str=32)textsij.setBackground(Color.magenta);else if(str=64)textsij.setBackground(Color.LIGHT_GRAY);else if(str=128)textsij.setBackground(Color.green);else if(str=256)textsij.setBackground(Color.gray);else if(str=512)textsij.setBackground(Color.DARK_GRAY);else if(str=1024)textsij.setBackground(Color.cyan);else if(str=2048)textsij.setBackground(Color.blue);else if(str=4096)textsij.setBackground(Color.white);GUI加法计算器(一) 加法计算器:是通过键盘输入加数和被加数,执行Run按钮,显示和在The sum is上,如若重新输入数执行的话,点击Restart按钮(二) 程序截图(三)程序代码import java.awt.event.*;import java.awt.*;import javax.swing.*;public class Sum_Calculation extends JFrame implements ActionListenerContainer cp; JTextField text1 ;JTextField text2; JTextField answertext ; JLabel lb1; JLabel lb2; JLabel lb3; JButton bt1; JButton bt2; Sum_Calculation()cp = getContentPane(); text1 = new JTextField(10); text2 = new JTextField(10); answertext = new JTextField(10); lb1 = new JLabel(Please input the first number); lb2 = new JLabel(Please input the second number); lb3 = new JLabel(The sum is); bt1 = new JButton(Run); bt2 = new JButton(Restart); cp.setLayout(new G
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钢筋工安全教育培训试题及答案
- 2025注册计量师试题及答案
- 法律法规2025合并版练习测试题附答案
- 南雄中医院招聘护理专业面试题库
- 养护知识直播培训会课件
- 护理行业市场业务课件
- 护理纠纷的防范和处理
- 养成读书的习惯课件
- 企业招聘面试案例分析:调休面试题的应用
- 提供面试礼仪考试题及答案详解
- 渝20TJ11 浮筑楼板隔声保温系统构造 难燃型改性聚乙烯复合卷材(蜂窝型)DJBT 50-143
- 湖北省武汉市武昌区2021-2023年三年中考一模英语试题分类汇编:首字母填空(含答案)
- 2023-2024年全国卷英语双向细目表
- 节日期间纪检监督检查记录表
- (完整word)600习题《工会基础知识试题及答案》2020.1.6
- GB 29518-2013柴油发动机氮氧化物还原剂尿素水溶液(AUS 32)
- 第三单元名著导读《儒林外史之严贡生、严监生》课件-部编版语文九年级下册
- 中医药法宣讲余课件
- 2022年郑州城市职业学院辅导员招聘考试笔试试题及答案解析
- 鲁班奖工程复查参考表格
- Q∕SY 17375-2016 钻井液用固体润滑剂石墨类
评论
0/150
提交评论