作业三

21点游戏

一、Card类

package com.csu.marden;

import java.util.ArrayList;

public class Card {
	
//	public static enum Suit{
//		CLUBS, HEARTS, DIAMONDS, SPADES
//	}
//	public static enum Value{
//		ACE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING
//	}
	

	
	public static  String [] suit={"CLUBS","HEARTS","DIAMONDS","SPADES"};
	public static String [] value={"ACE","TWO","THREE","FOUR","FIVE","SIX",
			                      "SEVEN","EIGHT","NINE","TEN","JACK","QUEEN","KING"};
	
	
	//成员变量
	private String _suit;
	private String _value;
	
	//构造函数
	public Card(String suit,String value){
		this._suit=suit;
		this._value=value;
	}
	

	//Getters and Setters
	public String get_suit() {
		return _suit;
	}

	public void set_suit(String _suit) {
		this._suit = _suit;
	}

	public String get_value() {
		return _value;
	}

	public void set_value(String _value) {
		this._value = _value;
	}
	


	@Override
	public String toString() {
		return "Card [_suit=" + _suit + ", _value=" + _value + "]";
	}


	//获取卡牌数值(返回ArrayList)
	public ArrayList<Integer> getNumericalValue(){
		ArrayList<Integer> temp=new ArrayList<>();
		if(this._value=="ACE"){
			temp.add(1);
			temp.add(11);
		}else if(this._value=="TWO"){
			temp.add(2);
		}
		else if(this._value=="THREE"){
			temp.add(3);
		}
		else if(this._value=="FOUR"){
			temp.add(4);
		}
		else if(this._value=="FIVE"){
			temp.add(5);
		}
		else if(this._value=="SIX"){
			temp.add(6);
		}
		else if(this._value=="SEVEN"){
			temp.add(7);
		}
		else if(this._value=="EIGHT"){
			temp.add(8);
		}
		else if(this._value=="NINE"){
			temp.add(9);
		}
		else if(this._value=="TEN" || this._value=="JACK" || this._value=="QUEEN" || this._value=="KING"){
			temp.add(10);
		}
		return temp;
	}
	
	
	
	

}

二、Player类

package com.csu.marden;

import java.util.ArrayList;

public class Player {
	//玩家姓名
	private String name;
	//玩家手牌
	private ArrayList<Card> cards;
	
	//构造函数
	public Player(){
		cards=new ArrayList<Card>();
	}
	
	public Player(String name){
		this.name=name;
		cards=new ArrayList<Card>();
	}
	
	//获取玩家姓名
	public String getName(){
		return name;
	}
	
	//给玩家手牌中增加一张牌(发牌)
	public void dealToPlayer(Card card){
		cards.add(card);
	}
	
	//从玩家手牌中去掉一张牌(打牌)
	public void removeCard(Card card){
		cards.remove(card);
	}
	
	//获取玩家手牌可能构成的所有值
	public ArrayList<Integer> getNumericalHandValue(){
		//累计玩家手牌中ACE牌的数量
		int count=0;
		//累计玩家手牌的总值
		int sum=0;
		for(int i=0;i<cards.size();i++){
			if(cards.get(i).get_value()!="ACE"){
				sum+=cards.get(i).getNumericalValue().get(0);
			}else{
				count++;
			}
		}
		ArrayList<Integer> temp=new ArrayList<Integer>();
		if(count==0){
			temp.add(sum);
		}else if(count==1){
			temp.add(sum+1);
			temp.add(sum+11);
		}else if(count==2){
			temp.add(sum+2);
			temp.add(sum+12);
			temp.add(sum+22);
		}else if(count==3){
			temp.add(sum+3);
			temp.add(sum+13);
			temp.add(sum+23);
			temp.add(sum+33);
		}else{
			temp.add(sum+4);
			temp.add(sum+14);
			temp.add(sum+24);
			temp.add(sum+34);
			temp.add(sum+44);
		}
		return temp;
	}
	
	//寻找局部最大值(找出不超过21,且最接近21的值)
	public int getbestNumericalHandValue(){
//		ArrayList<Integer> temp=this.getNumericalHandValue();
//		return temp.get(temp.size()-1);
		
		ArrayList<Integer> temp=this.getNumericalHandValue();
		if(temp.get(0)>21){ //整个序列都比21大,选最大值
			return temp.get(temp.size()-1);
		}else if(temp.get(temp.size()-1)<21){  //整个序列都比21小,选最大值
			return temp.get(temp.size()-1);
		}else{   //整个序列在21之间,选比21小,且最接近21的数
			//返回值应该是:比21小,且与21的差值最小的那个数
			int diff=Integer.MAX_VALUE; //差值
			int index=-1;  //下标
			for(int i=0;i<temp.size();i++){
				if(temp.get(i)<=21 && diff>21-temp.get(i)){
					diff=21-temp.get(i);
					index=i;
				}
			}
			return temp.get(index);
		}
		
		
	}
	
	//获取玩家的所有手牌
	public ArrayList<Card> getCards(){
		return cards;
		
	}
	
	//获取玩家的手牌数量
	public int getHandSize(){
		return cards.size();
		
	}

}

三、Deck类

package com.csu.marden;

import java.util.ArrayList;
import java.util.Random;

public class Deck {
	public static  String [] suit={"CLUBS","HEARTS","DIAMONDS","SPADES"};
	public static String [] value={"ACE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN","JACK","QUEEN","KING"};
	public static final int NUMS=52;
	private ArrayList<Card> deckCards;
	
	
	
	//构造函数
	public Deck(){
		deckCards=new ArrayList<Card>();
		for(int i=0;i<suit.length;i++){
			for(int j=0;j<value.length;j++){
				deckCards.add(new Card(suit[i], value[j]));
			}
		}
	}
	
	
	//重置(清空卡牌集合,并重置)
	public void reset(){
		deckCards.clear();
		for(int i=0;i<suit.length;i++){
			for(int j=0;j<value.length;j++){
				deckCards.add(new Card(suit[i], value[j]));
			}
		}
	}
	
	
	//洗牌
	public void shuffle(){
		Random random = new Random();
		for(int i=0;i<deckCards.size();i++){
			int p=random.nextInt(deckCards.size());//0-52之间的随机值(包含0,不包含52)
			Card temp=deckCards.get(i);
			deckCards.set(i, deckCards.get(p));
			deckCards.set(p, temp);
		}
	}
	
	//返回指定索引处的卡牌
	public Card getCard(int i){
		return deckCards.get(i);
	}
	
	
	//发牌,从剩余卡牌中随机选择一张并返回
	public Card dealRandomCard(){
		Random random=new Random();
		int p=random.nextInt(deckCards.size());
		Card temp=deckCards.get(p);
		deckCards.remove(p);
		return temp;
	}
	
	
	//返回当前一副扑克牌中的剩余卡牌数量
	public int size(){
		return deckCards.size();
	}

}

四、CardGame类

package com.csu.marden;

import java.util.ArrayList;

public abstract class Abr_CardGame {
	private Deck deck;
	private int nums_player;
	private ArrayList<Player> playerList;
	
	

	public Abr_CardGame(int nplayer) {
		deck=new Deck();
		this.nums_player=nplayer;
		Deck deck=new Deck();  //创建一副牌
		deck.shuffle();//洗牌
		playerList=new ArrayList<>();   //创建玩家
		for(int i=0;i<nplayer;i++){
			playerList.add(new Player());
		}
	}
	
	
	//给游戏中的每个玩家发一定数量的初始牌
		public abstract void dealInitialCards();
		
		
		//比较两个玩家的手牌大小
		//若hand1的手牌比hand2的手牌大,则返回-1
		//若hand2的手牌比hand1的手牌大,则返回+1
		//若hand1和hand2的手牌一样大,则返回0
		public abstract int compareHands(Player hand1,Player hand2);
	
	
	
	
	
	//返回手牌
		public Deck getDeck(){
			return deck;
		}
		
		//返回指定序号的玩家(手牌)
		public Player getPlayer(int i){
			return playerList.get(i);
			
		}
		
		//返回游戏中的玩家数量
		public int getNumPlayers(){
			return this.nums_player;
			
		}

}

五、Pontoon类

package com.csu.marden;

public class Ext_Pontoon extends Abr_CardGame {
	private int initialNum=2;  //玩家初始牌的数量
	
	public Ext_Pontoon(int nplayer) {
		super(nplayer);
		// TODO Auto-generated constructor stub
	}

	//给游戏中的每个玩家发一定数量的初始牌
		@Override
		public void dealInitialCards() {
			for(int i=0;i<getNumPlayers();i++){
				Player temp=getPlayer(i);
				for(int j=0;j<initialNum;j++){  //给指定的玩家发两张初始牌
					temp.dealToPlayer(getDeck().dealRandomCard());
				}
			}
		}
		
		
		//比较两个玩家的手牌大小
			//若hand1的手牌比hand2的手牌大,则返回-1
			//若hand2的手牌比hand1的手牌大,则返回+1
			//若hand1和hand2的手牌一样大,则返回0
		@Override
		public int compareHands(Player hand1, Player hand2) {
			int temp1=hand1.getbestNumericalHandValue();
			int temp2=hand2.getbestNumericalHandValue();
			if(temp1>21 && temp2>21){
				return 0;
			}else if(temp1>21 && temp2<=21){
				return 1;
			}else if(temp1<=21 && temp2>21){
				return -1;
			}else{
				if(temp1>temp2){
					return -1;
				}else if(temp1<temp2){
					return 1;
				}else{
					return 0;
				}
			}
		}

	
	
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值