
import javax.swing.*
import java.awt.BorderLayout
import java.awt.Container
import java.awt.event.*
public class SmallGame extends JFrame {
private Random r
private String[] box = { "剪刀", "石头", "布" }
private JComboBox choice
private JTextArea ta
private JLabel lb
private int win = 0
private int loss = 0
private int equal = 0
public SmallGame() {
initial()//调用initial方法,就是下面定义的那个.该方法主要是初始界面.
pack()
setTitle("游戏主界面")
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setLocation(400, 300)
setVisible(true)
}
public static void main(String[] args) {
new SmallGame()
}
public void initial() {
r = new Random()// 生成随机数
choice = new JComboBox()//初始化choice这个下拉框.也就是你选择出剪子还是石头什么的那个下拉框..
for (int i = 0i <box.lengthi++) {//为那个下拉框赋值.用前面定义的private String[] box = { "剪刀", "石头", "布" }附值.这样下拉框就有三个选项了..
choice.addItem(box[i])
}
ta = new JTextArea(3, 15)//初始化那个文本域3行15列
ta.setEditable(false)//让用户不能编辑那个文本域即不能在里面写东西
JButton okBut = new JButton("出招")//新建一个出招的按钮
okBut.addActionListener(new ActionListener() {//给出招按钮加个监听.意思就是监听着这个按钮看用户有没有点击它..如果点击就执行下面这个帆颂方法
public void actionPerformed(ActionEvent e) {//就是这个方法
ta.setText(getResult())//给那个文本域赋值..就是显示结果 赋值的是通过getResult()这个方法得到的返回值 getResult()这个方法下面会讲
lb.setText(getTotal())//给分数那个LABEL赋值..就是显示分数..赋值的是通过getTotal()这个方法得到的返回值
}
})
JButton clearBut = new JButton("清除分数")//新建一个清楚分数的按钮
clearBut.addActionListener(new ActionListener() {//同上给他加个监听
public void actionPerformed(ActionEvent e) {//如果用户点击了就执行这个方法
ta.setText("")//给文本域赋值为""..其实就是清楚他的内容
win = 0//win赋值为0
loss = 0//同上
equal = 0//同上
lb.setText(getTotal())//给显示分数那个赋值..因为前面已经都赋值为0了..所以这句就是让显示分数那都为0
}
})
lb = new JLabel(getTotal())//初始化那个显示分数的东西
JPanel choicePanel = new JPanel()//定义稿察一个面板..面板就相当于一个画图用的东西..可以在键轿茄上面加按钮啊文本域什么的..
choicePanel.add(choice)//把下拉框加到面板里
choicePanel.add(okBut)//把出招按钮加到面板里
choicePanel.add(clearBut)//把清楚分数按钮加到面板里
JScrollPane resultPanel = new JScrollPane(ta)//把文本域加到一个可滚动的面板里面..JScrollPane就是可滚动的面板..这样如果那个文本域内容太多就会出现滚动条..而不是变大
JPanel totalPanel = new JPanel()//再定义个面板..用来显示分数的..
totalPanel.add(lb)//把那个显示分数的label加到里面去
Container contentPane = getContentPane()//下面就是布局了..
contentPane.setLayout(new BorderLayout())
contentPane.add(choicePanel, BorderLayout.NORTH)
contentPane.add(resultPanel, BorderLayout.CENTER)
contentPane.add(totalPanel, BorderLayout.SOUTH)
}
public String getResult() {//获得结果的方法 返回值是一个String..这个返回值会用来显示在文本域里面
String tmp = ""
int boxPeop = choice.getSelectedIndex()//获得你选择的那个的索引..从0开始的..
int boxComp = getBoxComp()//获得电脑出的索引..就是随机的0-2的数
tmp += "你出:\t" + box[boxPeop]//下面你应该明白了..
tmp += "\n电脑出:\t" + box[boxComp]
tmp += "\n结果:\t" + check(boxPeop, boxComp)
return tmp
}
public int getBoxComp() {//就是产生一个0-2的随机数..
return r.nextInt(3)//Random的nextInt(int i)方法就是产生一个[0-i)的随机整数 所以nextInt(3)就是[0-2]的随机数
}
public String check(int boxPeop, int boxComp) {//这个就是判断你选择的和电脑选择的比较结果..是输是赢还是平..boxPeop就是你选择的..boxComp就是电脑选择的..
String result = ""
if (boxPeop == (boxComp + 1) % 3) {//(boxComp + 1) % 3 电脑选择的加上1加除以3取余..也就是如果电脑选0这个就为1..这个判断的意思就是如果电脑选0并且你选1..那么就是电脑选了
//private String[] box = { "剪刀", "石头", "布" }这里面下标为0的..你选了下标为1的..就是电脑选剪刀你选石头..所以你赢了..如果电脑选1..(boxComp + 1) % 3就为2..意思就是
//电脑选了石头你选了布..所以你赢了..另外一种情况你明白了撒..只有三种情况你赢..所以这里都包含了..也只包含了那三种..
result = "你赢了!"
win++//赢了就让记你赢的次数的那个变量加1
} else if (boxPeop == boxComp) {//相等当然平手了
result = "平"
equal++//同上了
} else {//除了赢和平当然就是输了..
result = "你输了!"
loss++//同上
}
return result
}
public int getPoint() {
return (win - loss) * 10
}
public String getTotal() {
return "赢:" + win + " 平:" + equal + " 输:" + loss + " 得分:"
+ getPoint()
}
}
希望你能明白哈。。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)