📄 gamemain.java
字号:
//package game;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.*;
import sun.audio.*;
///import game.Card;
//import game.Cards;
//import game.User;
public class GameMain extends JFrame {
static final long serialVersionUID = 1;
//每局游戏的一副牌
private Cards gameCards = new Cards();
//玩家得到的牌
private Vector userCards = new Vector();
//电脑方得到的牌
private Vector computerCards = new Vector();
//牌的图片存放目录
private static String imageFile = "images/";
//玩家得到的牌的点数总和
private int userCardsValue = 0;
//电脑方得到的牌的点数总和
private int computerCardsValue = 0;
//赌注
private int gameMoney = 0;
private JPanel computerCardsPanel = new JPanel();
private JPanel userCardsPanel = new JPanel();
private JPanel centerPanel = new JPanel();
private AudioStream as;
//构造函数
GameMain(){
/*
*初始化窗体
*/
this.setSize(900,700);
Font fonts=new Font("新宋体",Font.PLAIN,12);
this.setFont(fonts);
this.setTitle("21点游戏_By_FeiFei");
getContentPane().setLayout(new BorderLayout());
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int left = (screen.width - this.getWidth()) / 2;
int top = (screen.height - this.getHeight()) / 2;
this.setLocation(left, top);
}
//返回gameCards--一副游戏牌
public Cards getGameCards(){
return gameCards;
}
//返回userCards;
public Vector getUserCards(){
return userCards;
}
//返回computerCards
public Vector getComputerCards(){
return computerCards;
}
//开局
public void gameStart(){
//初始化游戏牌
gameCards.init();
//清空原有牌
userCards.clear();
computerCards.clear();
//给电脑方发牌
for(int i = 0 ;i < 5;i++){
countCardsValue(0);
if(getCardsValue(0) < 16)
addCard(0);
}
//给玩家方初始发牌2张
addCard(1);
addCard(1);
}
/*
* 发一张牌
* 参数: int u
* u = 0 给电脑方发牌
* u = 1 给玩家方发牌
*/
public void addCard(int u){
if(u == 0)
//computerCards.add(new Card("红桃","A",1));
computerCards.add(gameCards.deal());
if(u == 1)
userCards.add(gameCards.deal());
}
/*
* 计算牌的点数总和
*
* 参数: int u
* u = 0 计算电脑方的牌的点数总和
* u = 1 计算玩家方的牌的点数总和
*
* 计算算法:
* 1.计算非A的牌的点数和得到值1并统计出A的牌的个数
* 2.如果A的牌的个数大于0,则用1中的得到的值加上11加上A的牌的个数减1得到值2,
* 判断值2是否小于21,如果是则用值2作为此步骤的值,如果不是则用值1加上A的
* 牌的个数作为此步骤的值
*/
public void countCardsValue(int u){
int Anumber = 0;
if(u == 0 ){
computerCardsValue = 0;
if(computerCards.size() > 0){
for(int i = 0;i < computerCards.size();i++){
if(((Card)computerCards.elementAt(i)).getName() == "A"){
Anumber = Anumber + 1;
}
else{
computerCardsValue += ((Card)computerCards.elementAt(i)).getValue();
}
}
if(Anumber > 0){
if((computerCardsValue + 11 + Anumber-1 ) <= 21){
computerCardsValue = computerCardsValue + Anumber-1 + 11;
}
else{
computerCardsValue = computerCardsValue+ Anumber;
}
}
}
}
if(u == 1 ){
userCardsValue = 0;
if(userCards.size() > 0){
for(int i = 0;i < userCards.size();i++){
if(((Card)userCards.elementAt(i)).getName() == "A"){
Anumber = Anumber + 1;
}
else{
userCardsValue += ((Card)userCards.elementAt(i)).getValue();
}
}
if(Anumber > 0){
if((userCardsValue + 11 + Anumber-1 )<= 21){
userCardsValue = userCardsValue + Anumber-1 + 11;
}
else{
userCardsValue = userCardsValue+ Anumber;
}
}
}
}
}
/*
* 返回牌的点数总和
* 参数:int u
* u = 0 返回电脑方的牌的点数总和
* u = 1 返回玩家方的牌的点数总和
*/
public int getCardsValue(int u){
if(u == 0){
return computerCardsValue;
}
else if(u == 1){
return userCardsValue;
}
else{
return 0;
}
}
public JPanel getComputerCardsPanel(boolean o){
displayComputerCards(o);
return this.computerCardsPanel;
}
public JPanel getUserCardsPanel(){
displayUserCards();
return this.userCardsPanel;
}
public JPanel getCenterPanel(){
return centerPanel;
}
public void setGameMoney(int v){
gameMoney = v;
}
public int getGameMoney(){
return gameMoney;
}
public void displayComputerCards(boolean o){
if(o){
for(int i = 0;i < computerCards.size();i++){
JLabel newLabel = new JLabel("",new ImageIcon(imageFile + ((Card)(computerCards.elementAt(i))).getIco()),JLabel.CENTER);
newLabel.setBounds(70+130*i, 20, 130, 180);
computerCardsPanel.add(newLabel);
}
}
else{
for(int i = 0;i < 5;i++){
JLabel newLabel = new JLabel("",new ImageIcon(imageFile + "backSide.png"),JLabel.CENTER);
newLabel.setBounds(70+130*i, 20, 130, 180);
computerCardsPanel.add(newLabel);
}
}
computerCardsPanel.setBounds(70,20,800,180);
}
public void displayUserCards(){
for(int i = 0;i < userCards.size();i++){
JLabel newLabel = new JLabel("",new ImageIcon(imageFile + ((Card)(userCards.elementAt(i))).getIco()),JLabel.CENTER);
newLabel.setBounds(100+135*i, 400, 130, 180);
userCardsPanel.add(newLabel);
}
userCardsPanel.setBounds(100,400,800,180);
}
public void soundPlay(){
try {
FileInputStream fileau=new FileInputStream("images/sound1.mid" );
as=new AudioStream(fileau);
AudioPlayer.player.start(as);
}
catch(Exception e){
System.out.println("读取失败!");
}
}
public void soundStop(){
AudioPlayer.player.stop(as);
}
public static void main(String[] args){
final GameMain game = new GameMain();
final User gameUser = new User();
gameUser.init("feifei");
final User computerUser = new User();
computerUser.init("computer");
game.getContentPane().add(game.getCenterPanel(), BorderLayout.CENTER);
game.getCenterPanel().setLayout(null);
game.gameStart();
/*--------------界面创建---------------*/
/*
* 菜单栏
*/
//创建菜单栏
final JMenuBar menuBar = new JMenuBar();
////首级菜单项
final JMenu system = new JMenu("游戏");
final JMenu user = new JMenu("用户");
final JMenu set = new JMenu("设置");
final JMenu help = new JMenu("帮助");
//游戏-菜单项
final JMenuItem quit = new JMenuItem("退出");
//用户-菜单项
final JMenuItem setUser = new JMenuItem("用户设置");
//设置-菜单项
final JMenuItem musicOn = new JMenuItem("音乐开");
final JMenuItem musicOff = new JMenuItem("音乐关");
//帮助-菜单项
final JMenuItem gameHelp = new JMenuItem("帮助");
final JMenuItem about = new JMenuItem("关于");
//游戏-菜单项 添加
system.add(quit);
//用户-菜单项 添加
user.add(setUser);
//设置-菜单项 添加
set.add(musicOn);
set.add(musicOff);
//帮助-菜单项 添加
help.add(gameHelp);
help.add(about);
//首级菜单项 添加
menuBar.add(system);
menuBar.add(user);
menuBar.add(set);
menuBar.add(help);
//菜单栏 添加
game.setJMenuBar(menuBar);
/*
*工具栏
*
*/
//工具栏--创建
final JToolBar toolBar = new JToolBar();
//工具栏按钮--创建
final JButton b_dealCard = new JButton();
b_dealCard.setText("发牌");
final JButton b_chechout = new JButton();
b_chechout.setText("开牌");
final JButton b_newGame = new JButton();
b_newGame.setText("重新开局");
//工具栏按钮-- 添加
toolBar.add(b_dealCard);
toolBar.add(b_chechout);
toolBar.add(b_newGame);
//工具栏--添加
game.getContentPane().add(toolBar,BorderLayout.NORTH);
/*
* 牌的显示
*
*/
//电脑方牌的显示
game.getCenterPanel().add(game.getComputerCardsPanel(false));
//牌的背面
JLabel cardBack = new JLabel("",new ImageIcon(imageFile + "backSide.png"),JLabel.CENTER);
cardBack.setBounds(300, 210, 130, 180);
game.getCenterPanel().add(cardBack);
//玩家方的牌的显示
game.getCenterPanel().add(game.getUserCardsPanel());
/*
* 赌注
*/
final JLabel label = new JLabel();
label.setText("赌注:");
label.setBounds(470, 274, 60, 15);
game.getCenterPanel().add(label);
//赌注输入文本域
final JTextField T_gameMoney = new JTextField();
T_gameMoney.setBounds(470, 307, 130, 21);
T_gameMoney.setText("20");
game.getCenterPanel().add(T_gameMoney);
//赌注加按钮
final JButton b_moneyAdd = new JButton();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -