资源简介
实现电脑AI,电脑能够拆牌,压牌和自主出牌都能从最优解决方案中选择。
不足:
情形 压队友牌情形,压敌人牌情形
1 情形一:自己最后两手牌时,先出几乎不可能被压的牌如 22,QQKKAA,(被压牌比值为0的牌,如AAKKQQ,22等)(如果有,先出敌人不可能要的牌,如果没有敌人不可能要的牌,那就先出较小牌)自己的所有手牌中,只有一手牌的压牌比值不是1(如33344456,10JQKA,6)此时的策略为先
* 出被压牌比值为0的
2 情形二: 下家是敌人只剩 1张牌时,不要出单
7情形三 如果下家是敌人,不让顺单牌
8情形四:敌人只剩一手牌时,不惜一切代价要压牌
3 如果是队友,如果是顺牌,比如单牌,可以顺牌。目前是队友,则不出牌
4如果敌人出33,电脑567789,2,电脑不应该拆出77出牌
5最优方案不一定是一种,应该是一个List,压牌时,应该遍历所有的最优方案中,找出牌
6 电脑具备留一手最大牌放在倒数第二次出牌的功能
7电脑具备记牌功能,通过记牌功能,能刷新当前牌的压牌比值,和被压牌比值(如果已经出了222,和AAA,那么KK的被压牌比值将0)
Bug:如果单牌手数相等,应选择出牌手数最少的方案(比如33344456,和3335,4446)
王炸弹不能直接能出就出,应该在报纸,被压牌比值>0手数只有一手时出牌
计算是否压牌,比如大王小王,A,6, 人家出2,或者10,11,12,13,13,14,人家出对99,能不能拆1313的问题,拆了之后
拆牌规则重构:(不需要了)
如果单牌手数>0,单牌手数越小越好
不是单牌手数越小越好,如果单牌手数<0,那么在小于0当中的出牌手数最少的最好
压牌
单牌手数规则重构:
1 被压牌比值()为0的可以附加抵消0.5个单牌手数(,比如222除了能带一张单牌,由于这么出牌后,别人只能用炸弹压牌,所以,出了之后极有可能获得出牌权)
2 单牌或双牌如果被压牌比值=0,本身不视为单牌,并且可抵消0.5张单牌手数
3 要考虑自己的牌和已经出的牌
被压牌比值算法重构:如果自己有大王,小王,那么自己出大王小王,2的被压牌比值均为0,这样,大王,小王,2都可以抵消一张无用单牌,也就是说如果单牌中有被压牌比值=0的单牌,不但可以不算一手单牌,还可抵消1.5单牌;如果是之前的算法,大王都有可能被带到333上去。
压别人牌的时候,首先判断能不能压牌,如果能压,则从单牌手数从小到大的方式遍历
压牌规则重构:
2222,5,6, 别人出了QQ,你这时优先考虑出22
首先从最优方案找,再找出所有的可以压牌的方案,比较所有出牌后剩余牌的最优方案的
单牌手数,选择出牌之后剩余牌最优方案的单牌手数最少。
代码片段和文件信息
package com.bashao.card;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
/**
* 单张牌抽象类
* @author Administrator
*
*/
public class BashaoCard extends JLabel implements MouseListenerComparable{
public BashaoCard(Main mainint valueint colorboolean isOn){
this.main=main;
this.value=value;
this.color=color;
this.isOn=isOn;
this.canClick=false;
this.clicked=false;
initImagePath();
if(this.isOn)
this.turnFront();
else {
this.turnRear();
}
this.setSize(71 96);
this.setVisible(true);
this.addMouseListener(this);
}
Main main;
//纸牌大小(34...14是A,15是2,16是小王,17是大王)
private int value;
//纸牌花色(1,2,3,4,5四种花色)
private int color;
//图片地址
private String imagePath;
//是否正面
private boolean isOn;
//是否可以被点击
private boolean canClick;
//是否被点击过
boolean clicked=false;//是否点击过
//初始化图片路径
private void initImagePath(){
int realValue=0;
if(this.value==16){
this.imagePath=“5-1“;
}else if(this.value==17){
this.imagePath=“5-2“;
}else if(this.value>=14&&this.value<=15){
realValue=this.value-13;
this.imagePath=this.color+“-“+realValue;
}else{
this.imagePath=this.color+“-“+this.value;
}
}
//正面
public void turnFront() {
this.setIcon(new ImageIcon(“images/“ + this.imagePath + “.gif“));
this.isOn = true;
}
//反面
public void turnRear() {
this.setIcon(new ImageIcon(“images/rear.gif“));
this.isOn = false;
}
/**
* 判断两张牌是否是一张牌
* @param bc
* @return
*/
public boolean isEqual(BashaoCard bc){
if((this.getValue()==bc.getValue())&&(this.getColor()==bc.getColor())){
return true;
}else{
return false;
}
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
if(canClick)
{
move();
}
}
/**
* 让牌向上或向下移动
*/
public void move(){
Point from=this.getLocation();
int step; //移动的距离
if(clicked)
step=-20;
else {
step=20;
}
clicked=!clicked; //反向
//当被选中的时候,向前移动一步/后退一步
Common.move(thisfromnew Point(from.xfrom.y-step));
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public String getImagePath() {
return imagePath;
}
public void setImagePath(String imagePath) {
this.imagePath = imagePath;
}
public boo
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-10-13 17:29 bashaoCard\
文件 301 2012-10-12 09:22 bashaoCard\.classpath
文件 386 2012-10-12 09:22 bashaoCard\.project
目录 0 2012-10-13 17:29 bashaoCard\.settings\
文件 629 2012-10-12 09:22 bashaoCard\.settings\org.eclipse.jdt.core.prefs
目录 0 2012-10-13 17:29 bashaoCard\bin\
目录 0 2012-10-13 17:29 bashaoCard\bin\com\
目录 0 2012-10-13 17:29 bashaoCard\bin\com\bashao\
目录 0 2012-10-13 17:29 bashaoCard\bin\com\bashao\card\
文件 4274 2012-10-12 17:12 bashaoCard\bin\com\bashao\card\BashaoCard.class
文件 9647 2012-10-13 16:51 bashaoCard\bin\com\bashao\card\CardTypeFactory.class
文件 1020 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\Common$1.class
文件 3533 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\Common.class
文件 1515 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\ComputerTimeThread.class
文件 714 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\ICardType.class
文件 10140 2012-10-13 15:02 bashaoCard\bin\com\bashao\card\Main.class
文件 5538 2012-10-13 15:51 bashaoCard\bin\com\bashao\card\OneSendCard.class
文件 9146 2012-10-13 13:19 bashaoCard\bin\com\bashao\card\TimeThread.class
目录 0 2012-10-13 17:29 bashaoCard\bin\com\bashao\card\cardTypeImpl\
文件 1010 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\cardTypeImpl\CardTypeString.class
文件 5162 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\cardTypeImpl\DoubleCardType.class
文件 4522 2012-10-12 13:05 bashaoCard\bin\com\bashao\card\cardTypeImpl\FourCardType.class
文件 5216 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\cardTypeImpl\FourOneOneCardType.class
文件 4872 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\cardTypeImpl\FourTwoTwoCardType.class
文件 3904 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\cardTypeImpl\OneOneTwoTwoCardType.class
文件 4448 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\cardTypeImpl\OneTwoThreeCardType.class
文件 3883 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\cardTypeImpl\PlaneCardType.class
文件 4908 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\cardTypeImpl\PlaneOneCardType.class
文件 5037 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\cardTypeImpl\PlaneTwoCardType.class
文件 4442 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\cardTypeImpl\SingleCardType.class
文件 4848 2012-10-12 09:22 bashaoCard\bin\com\bashao\card\cardTypeImpl\ThreeAndOneCardType.class
............此处省略119个文件信息
- 上一篇:中文数字转成阿拉伯数字 java 实现
- 下一篇:哈工大J2EE课程设计
相关资源
- 八勺java斗地主AI版电脑智能拆牌
- Java斗地主游戏源码.zip
- JAVA项目-斗地主游戏 图形界面&&纸牌库
- Android 斗地主源码264938
- 纯java写的斗地主 java swing界面搭建
- android单机斗地主源码
- Android游戏源码算法完整的手机斗地主
- 斗地主JAVA
- 欢乐斗地主所有图片资源
- Android游戏源码支持网络对战和本地对
- 基于Swing界面的单机版斗地主
- 基于Java的网络版斗地主
- android 斗地主全套代码,包括服务端
- Android游戏源码支持网络对战和本地对
- java仿欢乐斗地主
- android斗地主源码
- android 斗地主源码
- 斗地主 游戏UML图及java代码
- QQ欢乐斗地主-手机游戏-全套源代码
- java单机斗地主完善版
- java单机斗地主
- java斗地主游戏源代码
- java网络斗地主
- java斗地主小游戏源码(单机版)
- java版斗地主源码
- JavaSwing的斗地主(小游戏源码)
- android 单机版斗地主
- Android 斗地主 UI+逻辑
- qq斗地主游戏app源码
- 掌中斗地主Android源代码
评论
共有 条评论