java实现打字游戏小程序
xxxxxxxdl 人气:0一、设计思路
1.创建一个窗体
2.在窗体上放置一个面板,用paint方法画出英文字母,随机放置字母位置,并随时间自动下落
3.设置得分扣分机制
4.在面板上添加键盘监听器,输入正确得分,输入错误则扣分
ps:面板和监听器用一个类实现(这样简单方便)
二、具体实现
MyPanel.java
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Panel; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; /** * 继承Panel类,Panel是Java中的面板类。基本上要操作窗体都会继承此类 * */ public class MyPanel extends Panel implements KeyListener{ int x[] = new int[10];//储存随机字母x轴 int y[] = new int[10];//储存随机字母y轴 char c[] = new char[10];//储存随机字母 int integral =1000;//初始1000积分 Color p[] =new Color[10];//用来存储颜色 public MyPanel() { for (int i = 0; i < 10; i++) { x[i]=(int)(Math.random()*300);//0-300 y[i]=(int)(Math.random()*50);//0-50 c[i]=(char)(Math.random()*26+97);//随机字母 p[i]=getRandColorCode();//获取十六进制的颜色代码.例如 "#6E36B4" } } /** * 复写Panel类的paint方法 */ public void paint(Graphics g) { if (integral>0) {//如果成绩>0,才能进来 for (int i = 0; i < 10; i++) {//十个英文字母 g.setColor(p[i]);//设置元素颜色 g.setFont(new Font("TimesRoman", Font.PLAIN, 20)); //设置字体,大小 //1.出现的元素,2.元素的x轴,3.元素的y轴 g.drawString(new Character(c[i]).toString().toUpperCase(),x[i],y[i]);//画出面板上的字母图像 } //显示积分在屏幕上 g.setColor(Color.red); g.setFont(new Font("TimesRoman", Font.PLAIN, 20)); g.drawString("你的成绩是:"+integral, 10, 30); donghua(); }else {//成绩<0,游戏结束 g.setColor(Color.red); g.setFont(new Font("TimesRoman", Font.PLAIN, 30)); g.drawString("GAME OVER", 50, 170); } } public void donghua() { for (int i = 0; i < 10; i++) {//对十个字母一直检测,如果没有超过面板就纵坐标+1,若超过了从顶部就重新生成字母 y[i]++;//字母的y轴 加1,既往下移动1个位置 if (y[i]>370) {//窗体边框占有一部分像素,所以设置370即可 y[i]=0;//设置该字母的纵坐标为0 x[i]=(int)(Math.random()*300); c[i]=(char)(Math.random()*26+97); integral-=100;//积分-100 } try { Thread.sleep(5);//暂停5毫秒,控制字母下落的速度, } catch (InterruptedException e) {} repaint();//重新绘制画面 } } //键盘监听器 public void keyPressed(KeyEvent e) { char keyC = e.getKeyChar(); int stat=-1;//存储最下面字母的值 int nowIndex=-1;//存储最下面字母的下标 for (int i = 0; i < 10; i++) {//找出所有匹配字母处于最下面的字母 if (keyC==c[i]) { if (y[i]>stat) {//第一次进来时,必定大于, stat=y[i];//记录坐标值 nowIndex=i;//记录字母的下标 } } } if (nowIndex!=-1) {//如果!=-1,证明输入正确,nowIndex为最下面的字母的下标,重新生成。积分+100 y[nowIndex]=0; x[nowIndex]=(int)(Math.random()*300); c[nowIndex]=(char)(Math.random()*26+97); integral+=100;//积分+100 }else {//如果==-1,证明输错了。积分-100 integral-=100;//积分-100 } } /** * 获取十六进制的颜色代码.例如 "#6E36B4" , * @return String */ public static Color getRandColorCode(){ int r,b,g; r=(int)(Math.random()*250); b=(int)(Math.random()*250); g=(int)(Math.random()*250); Color c =new Color(r, b, g); return c; } public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub }}
MyTyping.java
import java.awt.Frame; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.WindowConstants; public class MyTyping { /** 思路: 1.一个窗体 2.在窗体绘制元素(随机出现的字母) 3.加入键盘事件 4.加入计数器(分数) 5.匹配键盘录入字母和屏幕上的字母 一致:消除,并且从最上面重新生成.积分+ 不一致:不消除,积分- 没录入:不消除,积分- 6.积分<0,游戏结束 */ public static void main(String[] args) { JFrame f=new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置点击x关闭退出程序 f.setLocationRelativeTo(null);//窗体置中 f.setSize(300, 400);//设置窗体大小 MyPanel p = new MyPanel(); f.add(p);//将面板放入窗体中 f.addKeyListener(p);//注册键盘事件 p.addKeyListener(p);//注册键盘事件 f.setVisible(true);//显示窗体 }
三、运行截图
更多有趣的经典小游戏实现专题,分享给大家:
加载全部内容