⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamemain.java

📁 21点游戏实现一个21点游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//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 + -