ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java课程设计-运用JavaFX的卡牌游戏

2022-01-12 03:31:26  阅读:168  来源: 互联网

标签:课程设计 Java String JavaFX result new return public BigDecimal


团队情况

  • 组长兼成员:廖浩轩
  • 主要任务:游戏运行代码和JavaFX的界面设计
  • 博客地址:本博客

前期调查

网上看到一个用扑克牌就能玩的桌游,基于此桌游规则实现游戏设计。

功能架构图

面向对象设计

包图

项目运行截图

登录

注册

游戏主界面

项目关键代码

util类

DbUtil:数据库连接

public class DbUtil {
	
	static String url="jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=UTF-8&useSSL=false";//数据库安装地址
	
	static String username="root";//数据库用户名
	
	static String password="123456";//数据库密码
	
	static String driver="com.mysql.cj.jdbc.Driver";//连接的驱动
	
	
	
	static {    //注册驱动
		try {
			Class.forName(driver);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static Connection getConn() {  //连接数据库
		try {
			return DriverManager.getConnection(url,username,password);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
}

Subtraction:卡牌计算

public class Subtraction {
	static String two="2";
	static BigDecimal num4=new BigDecimal(two);
		
	public static String bloodSubtraction(String blood1,String cardNum,String cardDecor) {   //血量计算
		BigDecimal num1=new BigDecimal(blood1);
		BigDecimal num2=new BigDecimal(cardNum);
		if(cardDecor.equals("4")) {
			BigDecimal num=num2.multiply(num4);    //打出黑桃牌造成点数双倍的伤害
			BigDecimal result =num1.subtract(num);
			String s=result.toString();
			return s;
		}else {
			BigDecimal result =num1.subtract(num2);
			String s=result.toString();
			return s;
		}
		
	}
	
	public  static String surplusSubtraction(String surplus,String num) {   //剩余卡牌计算
		BigDecimal num1=new BigDecimal(surplus);
		BigDecimal num2=new BigDecimal(num);
		BigDecimal result =num1.subtract(num2);
		String s=result.toString();
		return s;
	}
}

model类

Card:卡牌信息

public class Card {
	private int number;
	private int decor;
	public static final String[] DECOR= {"1","2","3","4"};
	public static final String[] NUMBER= {"1","2","3","4","5","6","7","8","9","10"};
	
	
	public String toString() {
		return DECOR[decor]+NUMBER[number];	
	}
	
	public Card(int decor,int number) {
		this.number=number;
		this.decor=decor;
	}
	
	public int getNumber() {
		return number;
	}
	
	public void setNumber(int number) {
		this.number = number;
	}
	
	public int getDecor() {
		return decor;
	}
	
	public void setDecor(int decor) {
		this.decor = decor;
	}

}

Momentum:变量

public class Momentum {
	private StringProperty aggressivity;
	private StringProperty blood;
	private StringProperty cardSurplus;
	
	public Momentum(StringProperty aggressivity,StringProperty blood,StringProperty cardSurplus) {
		this.aggressivity=aggressivity;
		this.blood=blood;
		this.cardSurplus=cardSurplus;
	}
	
	public Momentum(String aggressivity,String blood,String cardSurplus) {
		this.aggressivity=new SimpleStringProperty(aggressivity);
		this.blood=new SimpleStringProperty(blood);
		this.cardSurplus=new SimpleStringProperty(cardSurplus);
	}

	public StringProperty getAggressivity() {
		return aggressivity;
	}
	
	public void setAggressivity(StringProperty aggressivity) {
		this.aggressivity = aggressivity;
	}
	
	public StringProperty getBlood() {
		return blood;
	}
	
	public void setBlood(StringProperty blood) {
		this.blood = blood;
	}

	public StringProperty getCardSurplus() {
		return cardSurplus;
	}

	public void setCardSurplus(StringProperty cardSurplus) {
		this.cardSurplus = cardSurplus;
	}
	
}

dao类

UserDao:用户信息与数据库交互

public class UserDao {
	
	public User findUser(String username,String password) {   //查找用户
		Connection connection=DbUtil.getConn();
		String sql="select * from user_account where username=?";
		User user =null;
		PreparedStatement ps=null;
		ResultSet rs =null;
		try {
			ps = connection.prepareStatement(sql);
			ps.setString(1, username);
			rs =ps.executeQuery();
			while(rs.next()) {
				user=new User();
				user.setUsername(rs.getString("username"));
				user.setPassword(rs.getString("password"));
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				ps.close();
				rs.close();
				connection.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return user;
	}
		
	
	public boolean addUser(User user) {   //添加用户
		Connection conn =DbUtil.getConn();
		String sql="insert into user_account(username,password) values(?,?)";
		PreparedStatement ps=null;
		int result=0;
		try {
			ps= conn.prepareStatement(sql);
			ps.setString(1, user.getUsername());
			ps.setString(2, user.getPassword());
			result =ps.executeUpdate();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result != -1;
	}
}

controller类

GameController:游戏界面控制(展示部分关键代码)

    public void changeUseMomentum(Momentum momentum) {   //修改用牌时变量
    	atk.textProperty().bind(momentum.getAggressivity());
    	blood.textProperty().bind(momentum.getBlood());
    	surplus.textProperty().bind(momentum.getCardSurplus());
    }
    
    public void changeDisappearMomentum(Momentum momentum) {   //修改弃牌时变量
    	surplus.textProperty().bind(momentum.getCardSurplus());
    }

    public void setMomentum() {   //初始化变量 
    	Momentum monentum= new Momentum(newatk,newblood,newsurplus);
    	changeUseMomentum(monentum);
    }

    public void getCards() {   //初始化牌组
		for(int i=0;i<4;i++) {
			for(int j=0;j<10;j++) {
				Card card=new Card(i,j);
				cards.add(card);
			}
		}
		Collections.shuffle(cards);
		showCards(cards);
    }
    
	public void showCards(List<Card> cards) {   //初始化手牌
		cardImages.add(cardImage1);
		cardImages.add(cardImage2);
		cardImages.add(cardImage3);
		cardImages.add(cardImage4);
		cardImages.add(cardImage5);
		cardImages.add(cardImage6);
		cardImages.add(cardImage7);
		cardImages.add(cardImage8);
		for (int i = 0; i < 8; i++) {
			cardImages.get(i).setImage(new Image("file:images/"+cards.get(0)+".png"));
			cards.remove(0);
		}
	}
public void calculationUseCard(ImageView cardImage) {   //修改用牌时点数计算
		@SuppressWarnings("deprecation")
		String s=cardImage.getImage().impl_getUrl();
		sendNum=Extract.extractNumbers(s);
		cardDecor=sendNum.substring(0, 1);
		cardNum=sendNum.substring(1);
		if(cardDecor.equals("1")) {
			clubSupplementCard(cardNum);
		}
		String result =Subtraction.bloodSubtraction(blood1,cardNum,cardDecor);
		String now=Subtraction.surplusSubtraction(surplus1, "1");
		Momentum monentum= new Momentum(atk1,result,now);
    	changeUseMomentum(monentum);
		blood1=result;
		surplus1=now;
    }
	
	public void calculationDisappearCard(ImageView cardImage) {   //修改弃牌时点数计算
		@SuppressWarnings("deprecation")
		String s=cardImage.getImage().impl_getUrl();
		sendNum=Extract.extractNumbers(s);
		cardDecor=sendNum.substring(0, 1);
		cardNum=sendNum.substring(1);
		String result =blood1;
		String now=Subtraction.surplusSubtraction(surplus1, "1");
		Momentum monentum= new Momentum(atk1,result,now);
    	changeDisappearMomentum(monentum);
		blood1=result;
		surplus1=now;
	}

改进及感想

感想:虽然项目看起来不难,但一个人做的话各个知识点都需要学习,有些时间不足,尝试不同于swing的JavaFX界面设计时花费蛮多时间,但是上手后能实现不错的效果,游戏功能只是基本实现,和原本的规则比起来还差很多,后续游戏逻辑不难但唯独就是时间不够了,日后有待完善空间。经过这次课设让我对面向对象编程有了更深刻的理解,同时也学到了很多新知识,虽然只是浅尝辄止,但相信对我日后的学习会有帮助,同时有感叹计算机技术的高深,一项一项技术组合起来就能实现非常棒的项目,期待之后的学习中能加深理解,以后利用更多的知识实现更多的的功能,创造更好的项目。
改进

  • 卡牌的model或许可以写入数据库中,既方便读取也方便增改,以达到出牌补牌的操作
  • JavaFX的动画功能和音乐功能还没有深刻学习,同时在这次项目中也没有运用,后续添加可以得到更好的体验
  • 界面设计可以更加的合理和美观,功能可以更加的丰富和详细
  • 游戏功能有待完全实现

标签:课程设计,Java,String,JavaFX,result,new,return,public,BigDecimal
来源: https://www.cnblogs.com/miao-witch/p/15790888.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有