几乎所有的RPG游戏(一种源自《龙与地下城》的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色。本次上机要求编写一个简化的创建游戏角色的程序。
Information
package
com.rpg.game;
import
java.awt.Color;
import
java.awt.Font;
import
javax.swing.ButtonGroup;
import
javax.swing.JFrame;
import
javax.swing.JLabel;
import
javax.swing.JRadioButton;
import
javax.swing.JTextField;
public
class Information {
JFrame f = new JFrame("欢迎进入");//窗口名称
JLabel lname=new JLabel(" ☆ 姓名: ");
JTextField name=new JTextField(500);
JLabel lsex=new JLabel(" ☆ 性别: ");
ButtonGroup bgrp_sex=new
ButtonGroup();//单选;设置按钮组
JRadioButton sex0=new
JRadioButton("男♂");
JRadioButton sex1=new
JRadioButton("女♀");
public void frame(){
f.setSize(850,450);//大小
f.setLocation(500,200);//位置
f.setLayout(null);
JLabel title=new JLabel("龙与地下城");
title.setBounds(300, 30, 500, 50);
title.setFont(new Font("隶书",
Font.BOLD, 40));
f.add(title);
JLabel build=new JLabel("请创建您的角色
");
build.setBounds(50, 80, 500, 50);
build.setFont(new Font("隶书",
Font.BOLD, 30));
f.add(build);
f.getContentPane().setBackground(new
Color(210,240,240));
f.setVisible(true);
}
public void get_Information(){
//游戏角色姓名输入
lname.setBounds(50, 150, 150,
30);//起始坐标(x,y),长度,高度
f.add(lname);
lname.setFont(new Font("楷体",
Font.BOLD, 20));
name.setBounds(200, 150, 200,
30);
f.add(name); //游戏性别选择
lsex.setBounds(50, 200, 150,
30);
f.add(lsex);
lsex.setFont(new Font("楷体",
Font.BOLD, 20));
sex0.setBounds(200, 200, 100, 30);
sex1.setBounds(300, 200, 100, 30);
bgrp_sex.add(sex0);
bgrp_sex.add(sex1);
f.add(sex0);
f.add(sex1);
sex0.setOpaque(false);
sex1.setOpaque(false);
f.setVisible(true);
}
}
Race类继承基类
package com.rpg.game;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.ButtonGroup;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
public class Race extends Information {
JLabel
lrace=new JLabel(" ☆ 种族: ");
ButtonGroup
bgrp_race=new ButtonGroup();//单选;设置按钮组
JRadioButton
race0=new JRadioButton("人类");
JRadioButton
race1=new JRadioButton("精灵");
JRadioButton
race2=new JRadioButton("兽人");
JRadioButton
race3=new JRadioButton("矮人");
JRadioButton
race4=new JRadioButton("元素");
JLabel
lcareer=new JLabel(" ☆ 职业:
");
ButtonGroup
bgrp_career=new ButtonGroup();//单选;设置按钮组
JRadioButton
career0=new JRadioButton("狂战士");
JRadioButton
career1=new JRadioButton("圣骑士");
JRadioButton
career2=new JRadioButton("刺客");
JRadioButton
career3=new JRadioButton("猎手");
JRadioButton
career4=new JRadioButton("祭司");
JRadioButton
career5=new JRadioButton("巫师");
public
void get_Race(){
//游戏种族选择
lrace.setBounds(50,
250, 150, 30);
f.add(lrace);
lrace.setFont(new Font("楷体", Font.BOLD,
20));
//五个种族的单选按钮
race0.setBounds(200, 250, 100, 30);
race1.setBounds(300, 250, 100, 30);
race2.setBounds(400, 250, 100, 30);
race3.setBounds(500, 250, 100, 30);
race4.setBounds(600, 250, 100, 30);
bgrp_race.add(race0);
bgrp_race.add(race1);
bgrp_race.add(race2);
bgrp_race.add(race3);
bgrp_race.add(race4);
f.add(race0);
f.add(race1);
f.add(race2);
f.add(race3);
f.add(race4);
race0.setOpaque(false);
race1.setOpaque(false);
race2.setOpaque(false);
race3.setOpaque(false);
race4.setOpaque(false);
lcareer.setBounds(50, 300, 150, 30);
f.add(lcareer);
lcareer.setFont(new Font("楷体", Font.BOLD,
20));
career0.setBounds(200, 300, 100, 30);
career1.setBounds(300, 300, 100, 30);
career2.setBounds(400, 300, 100, 30);
career3.setBounds(500, 300, 100, 30);
career4.setBounds(600, 300, 100, 30);
career5.setBounds(700, 300, 100, 30);
bgrp_career.add(career0);
bgrp_career.add(career1);
bgrp_career.add(career2);
bgrp_career.add(career3);
bgrp_career.add(career4);
bgrp_career.add(career5);
f.add(career0);
f.add(career1);
f.add(career2);
f.add(career3);
f.add(career4);
f.add(career5);
career0.setOpaque(false);
career1.setOpaque(false);
career2.setOpaque(false);
career3.setOpaque(false);
career4.setOpaque(false);
career5.setOpaque(false);
race0.addItemListener(new ItemListener() {
public void
itemStateChanged(ItemEvent e)
{
if(e.getStateChange()==ItemEvent.SELECTED){
career0.setEnabled(true);
career1.setEnabled(true);
career2.setEnabled(true);
career3.setEnabled(true);
career4.setEnabled(true);
career5.setEnabled(true);
}
}
});
race1.addItemListener(new ItemListener() {
public
void itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.SELECTED){
career0.setEnabled(false);
career1.setEnabled(false);
career2.setEnabled(true);
career3.setEnabled(true);
career4.setEnabled(true);
career5.setEnabled(true);
}
}
});
race2.addItemListener(new ItemListener() {
public void
itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.SELECTED){
career0.setEnabled(true);
career1.setEnabled(false);
career2.setEnabled(false);
career3.setEnabled(true);
career4.setEnabled(true);
career5.setEnabled(false);
}
}
});
race3.addItemListener(new ItemListener() {
public void
itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.SELECTED){
career0.setEnabled(true);
career1.setEnabled(true);
career2.setEnabled(false);
career3.setEnabled(false);
career4.setEnabled(true);
career5.setEnabled(false);
}
}
});
race4.addItemListener(new ItemListener() {
public void
itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.SELECTED){
career0.setEnabled(false);
career1.setEnabled(false);
career2.setEnabled(false);
career3.setEnabled(false);
career4.setEnabled(true);
career5.setEnabled(true);
}
}
});
f.setVisible(true);
}
}
Random 生成随机数类
package com.rpg.game;
import java.util.*;
public class get_Random {
public
int power;//力量
public
int speed;//敏捷
public
int physical;//体力
public
int IQ;//智力
public
int wisdom;//智慧
public
int HP=physical*20;//生命值
public
int MP=(IQ+wisdom)*10;//魔法值
public
String count;
public
String getRandom(int a,int b,int c,int d,int e){
int
power;//力量
int
speed;//敏捷
int
physical;//体力
int
IQ;//智力
int
wisdom;//智慧
Random
rand=new Random();
do{
power=a+rand.nextInt()%5;
speed=b+rand.nextInt()%5;
physical=c+rand.nextInt()%5;
IQ=d+rand.nextInt()%5;
wisdom=e+rand.nextInt()%5;
}
while(power+speed+physical+IQ+wisdom!=100);
int
HP=physical*20;//生命值
int
MP=(IQ+wisdom)*10;//魔法值
count="力量值:\t"+power+"\n\n敏捷度:\t"+speed+"\n\n体力值:\t"+physical+"\n\n智力值:\t"+IQ+"\n\n智慧值:\t"+wisdom+"\n\n生命值:\t"+HP+"\n\n魔法值:\t"+MP;
return
count;
}
}
RPG_GUI
package
com.rpg.game;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class RPG_GUI extends Race {
JFrame
fr = new JFrame();
String
user_name;
String
user_sex;
String
race;
String
career;
public
static final String NEW_LINE = System.getProperty("line.separator");
//
获取系统的换行符
public
static final String FILE_PATH = "E:/users.txt";
Save
save = new Save();
public
void game(){
//设置生成按钮
JButton
complete=new JButton("下一步");
complete.setBounds(350,
350, 100, 30);
f.add(complete);
f.setVisible(true);//可见性
//生成按钮的事件响应
complete.addActionListener(new
ActionListener() {
public
void actionPerformed(ActionEvent e) {
if(e.getSource()==complete){
f.setVisible(false);
//设置生成的角色显示界面
JFrame
fr=new JFrame();
fr.setLocation(700,
100);
fr.setTitle("您的角色");
fr.setSize(400,800);
fr.setLayout(null);
fr.getContentPane().setBackground(new
Color(40,210,210));
get_Random
rand=new get_Random();
user_name=name.getText();//获取静态文本框输入的姓名
user_sex
= null;
if(sex0.isSelected())
user_sex="男";//获取选择的性别
else
if(sex1.isSelected()) user_sex="女";
JLabel
a = new JLabel("姓名: "+user_name);
JLabel
b=new JLabel("性别: "+user_sex);
race
= null;
String
str=null;
if(race0.isSelected())
{race="人类";str=rand.getRandom(40,20,30,5,5);}
else
if(race1.isSelected())
{race="精灵";str=rand.getRandom(25,15,30,20,10);}
else
if(race2.isSelected())
{race="兽人";str=rand.getRandom(20,35,20,15,10);}
else
if(race3.isSelected())
{race="矮人";str=rand.getRandom(15,40,15,10,20);}
else
if(race4.isSelected())
{race="元素";str=rand.getRandom(10,20,10,20,40);}
JLabel
c=new JLabel("种族: "+race);
career
= null;
if(career0.isSelected())career="狂战士";
else
if(career1.isSelected()) career="圣骑士";
else
if(career2.isSelected()) career="刺客";
else
if(career3.isSelected()) career="猎手";
else
if(career4.isSelected()) career="祭司";
else
if(career5.isSelected()) career="巫师";
JLabel
d=new JLabel("职业: "+career);
JTextArea
value=new JTextArea();
value.setText(str);
a.setBounds(100,
50, 400, 30);
b.setBounds(100,
100, 300, 30);
c.setBounds(100,
150, 300, 30);
d.setBounds(100,
200, 300, 30);
value.setEditable(false);
value.setBounds(100,
250, 150, 400);
value.setOpaque(false);//设置为不透明
a.setFont(new
Font("黑体",Font.BOLD, 20));
b.setFont(new
Font("黑体",Font.BOLD, 20));
c.setFont(new
Font("黑体",Font.BOLD, 20));
d.setFont(new
Font("黑体",Font.BOLD, 20));
value.setFont(new
Font("黑体",Font.BOLD, 20));
JLabel
isOK =new JLabel("您对生成角色是否满意?");
isOK.setBounds(100,
600, 400, 30);
isOK.setFont(new
Font("黑体", Font.PLAIN, 20));
fr.add(isOK);
JButton
yes=new JButton("满意");
yes.setBounds(100,
650, 80, 30);
fr.add(yes);
JButton
no=new JButton("不满意");
no.setBounds(200,
650, 80, 30);
fr.add(no);
fr.add(a);
fr.add(b);
fr.add(c);
fr.add(d);
fr.add(value);
fr.setVisible(true);
//满意按钮弹出提示框
yes.addActionListener(new
ActionListener() {
public
void actionPerformed(ActionEvent e) {
StringBuffer
sb = new StringBuffer();
sb.append("姓名:
"+user_name+NEW_LINE+"性别: "+user_sex+NEW_LINE+"种族:
"+race+NEW_LINE+"职业: "+career+
NEW_LINE+rand.count+NEW_LINE);
save.saveInfo(sb.toString());
JOptionPane.showMessageDialog(new
JFrame().getContentPane(), "恭喜您
创建成功!", "系统信息", JOptionPane.PLAIN_MESSAGE); } });
//不满意按钮弹出提示框
no.addActionListener(new
ActionListener() {
public
void actionPerformed(ActionEvent e) {
int
option = JOptionPane.showConfirmDialog(fr, "您是否想重新创建");
if
(JOptionPane.OK_OPTION == option) {
fr.setVisible(false);
name.setText(null);
bgrp_sex.clearSelection();
career0.setEnabled(true);
career1.setEnabled(true);
career2.setEnabled(true);
career3.setEnabled(true);
career4.setEnabled(true);
career5.setEnabled(true);
bgrp_race.clearSelection();
bgrp_career.clearSelection();
f.setVisible(true); }
else
if(JOptionPane.NO_OPTION==option){
fr.setVisible(false);
}
}
});
}
}
});
}
public
static void main(String[] args) {
RPG_GUI
rpg=new RPG_GUI();
rpg.frame();
rpg.get_Information();
rpg.get_Race();
rpg.game();
}
}
Save 保存信息到文件中:
package com.rpg.game;
import java.io.FileWriter;
import java.io.IOException;
public class Save {
public
static final String NEW_LINE = System.getProperty("line.separator");
//
获取系统的换行符
public
static final String FILE_PATH = "E:/users.txt";
//指定文件的路径 //方法:保存信息到文件
public
boolean saveInfo(String info) {
FileWriter
fw;
try
{
fw
= new FileWriter(FILE_PATH, true);
//追加文字到文件尾部
fw.write(info);
fw.close();
}
catch (IOException e) {
e.printStackTrace();
return
false;//IO异常,保存不成功
}
return
true;//保存成功
}
}