拿到一个RPG小游戏的练习项目!
需求是要做控制台版本的
要有:
人物
怪物
NPC
战斗
背包
金钱
等属性…
做了一点…
感觉控制台版本的好low
还是窗体的有点意思。
不用说了,改行窗体。
但是好像没学过窗体,于是打开了万能的度娘,233。
然后分分钟创建出一个空的窗体。
要做窗体需要继承一个叫JFrame 的类,网上搜了一下这个好像叫可视化开发,管他呢,只要能弄个框出来给我看就行了
然后要在窗体上创建一个画布
static JPanel h=new JPanel();//画布
虽然直接用JFrame的框也行,但是要关闭的话整个框都会关闭,所以放个画布上面,关闭的时候就只清除画布,然后下个面板将他重绘一下就好了。
static JButton b;//按钮
static JTextField t;//输入框
static JLabel i;//文字吧
这些是我这个项目里经常用的组建,按钮和文字都能插入图片,一般背景图都是用JLabel做的,就是将图片位置给到他,然后把他的优先级设置为min如下:
队了,好像忘说我的项目是啥了,听好了:
小猪佩奇养成系统
无与伦比的界面,让人看的心旷神怡。
接下来就是做个提示框
代码如下:
百度一下你就知道…
这是搜到了别人写的完善的提示框对应的代码。
这是我写的例子,if就是判断确认或取消之后发生的事件!
接下来都是用按钮啥的点击跳转,跳转的时候要将上一个窗口里写的所有控件和画布隐藏
大致就是这个样吧,a是按钮控件的名字,也就是
*.setVisible(false);就是隐藏控件,控件太多的话建议写过方法,毕竟跳转的时候总是会用到
战斗场景就是做个动态窗体,然后通过坐标来触发事件
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
@SuppressWarnings(“serial”)
public class Yfield extends JFrame{
MyPanel mp=null;
public void ma() {
@SuppressWarnings("unused")
Yfield pb=new Yfield();
}
public Yfield()
{
super.setResizable(false);
mp=new MyPanel();
this.add(mp);
//事件监听
this.addKeyListener(mp);
this.setBounds(650,200,500,500);
this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
this.setVisible(true);
}
class MyPanel extends JPanel implements KeyListener
{
int x=10;
int y=10;
boolean im=true;
public void paint(Graphics g)
{
Icon icon=new ImageIcon("…/MyGame/img/Rpjbj.jpg");
JLabel i=new JLabel(icon);
i.setBounds(0, 0, 500, 500);
super.add(i,new Integer(Integer.MIN_VALUE));
super.paint(g);
Image image=Toolkit.getDefaultToolkit().getImage("../MyGame/img/np.jpg");
g.drawImage(image, x, y, 30,30, this);
Image image2=Toolkit.getDefaultToolkit().getImage("../MyGame/img/moj.jpg");
g.drawImage(image2, 100,100, 50,50, this);
Image image3=Toolkit.getDefaultToolkit().getImage("../MyGame/img/npc.jpg");
g.drawImage(image3, 200,200, 30,50, this);
if(im==true&&x>80&&x<150&&y>80&&y<150){
im=false;
int n = JOptionPane.showConfirmDialog(null, "发现一只野生的猪,是否战斗!", "警告", JOptionPane.YES_NO_OPTION);
if (n == JOptionPane.YES_OPTION) {
Combat.combat();
paint(g);
}
else {
paint(g);
}
}else if(im==false&&!(x>80&&x<150&&y>80&&y<150)){
im=true;
}
}
@Override//键被按下
public void keyPressed(KeyEvent e) {
//System.out.println("被按下"+(char)e.getKeyCode());
switch(e.getKeyCode())
{
case KeyEvent.VK_UP:
y-=2;
//调用repaint()函数,重新绘制小球位置
this.repaint();
break;
case KeyEvent.VK_DOWN:
y+=2;
//调用repaint()函数,重新绘制小球位置
this.repaint();
break;
case KeyEvent.VK_LEFT:
x-=2;
//调用repaint()函数,重新绘制小球位置
this.repaint();
break;
case KeyEvent.VK_RIGHT:
x+=2;
//调用repaint()函数,重新绘制小球位置
this.repaint();
break;
}
}
@Override//表示具体一个值被输出,例如:F1
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override//键被释放
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}
}
代码如上,我也不是全部都清楚,监听移动啥的都是百度上Copy的。
这是商城,虽然很丑,但是我找不到好看的图,屠宰场的图还是组长大发慈悲画的。
这次就这样吧,战斗场景还有bug我要去改改!!!