关于java基础的扑克牌跑得快算法java问题

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
扑克牌—java 源代码
下载积分:1557
内容提示:扑克牌—java 源代码
文档格式:DOC|
浏览次数:19|
上传日期: 14:08:39|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1557 积分
下载此文档
该用户还上传了这些文档
扑克牌—java 源代码
官方公共微信package com.
import java.awt.C
import java.awt.F
import java.awt.G
* 卡片(一张扑克)
* @author 骆昊
public class Card {
public Card(String suite, int face) {
this.suite =
this.face =
public String getSuite() {
public int getFace() {
* 绘制卡片
* @param g 画笔
* @param x 横坐标
* @param y 纵坐标
public void draw(Graphics g, int x, int y) {
// 从上下文环境中取出边框图片进行绘制
g.drawImage(GameContext.getImage(&边框&), x, y, 100, 150, null);
// 从上下文环境中取出花色对应的图片进行绘制
g.drawImage(GameContext.getImage(suite), x + 10, y + 10, null);
String str = &&;
switch(face) {
str += &A&;
str += &J&;
str += &Q&;
str += &K&;
// 设置画笔颜色
if(suite.equals(&黑桃&) || suite.equals(&草花&)) {
g.setColor(Color.BLACK);
g.setColor(Color.RED);
// 设置画笔字体
g.setFont(new Font(&Times New Roman&, Font.BOLD, 14));
// 绘制点数
g.drawString(str, x + 30, y + 30);
为一张牌写的对象
package com.
* @author 骆昊
public class Poker {
private Card[] cards = new Card[52];
public Poker() {
String[] suites = {&黑桃&, &红心&, &草花&, &方块&};
int[] faces = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
for(int i = 0; i & cards. i++) {
cards[i] = new Card(suites[i / 13], faces[i % 13]);
* 洗牌(随机乱序)
public void shuffle() {
for(int i = 0; i & cards. i++) {
int pos = (int) (Math.random() * cards.length);
Card temp = cards[i];
cards[i] = cards[pos];
cards[pos] =
* @param index 第几张牌的位置索引
* @return 指定位置的那张牌
public Card deal(int index) {
return cards[index];
为一副牌写的对象
import java.awt.I
import java.util.HashM
import java.util.M
* 游戏上下文环境(保持游戏要使用的图片)
* @author 骆昊
public class GameContext {
private static Map&String, Image& map = new HashMap&String, Image&();
private GameContext() {
* 添加一张图
* @param name 名字
* @param image 图片对象
public static void addImage(String name, Image image){
map.put(name, image);
* 检索一张图
* @param name 名字
* @return 图片对象
public static Image getImage(String name) {
return map.get(name);
package com.
import java.awt.FlowL
import java.awt.G
import java.awt.event.ActionE
import java.awt.event.ActionL
import java.util.ArrayL
import java.util.L
import javax.swing.JB
import javax.swing.JF
@SuppressWarnings(&serial&)
public class GameFrame extends JFrame {
private boolean initialized = // 是否完成预加载图片
private String[] names = {&边框&, &草花&, &方块&, &红心&, &黑桃&};
private String[] filenames = {&border.jpg&, &club.jpg&, &diamond.jpg&, &heart.jpg&, &spade.jpg&};
private Poker p = new Poker();
// 创建一副扑克
private int index = 0;
// 发牌的位置
private Card currentCard = // 当前发的那张扑克
private List&Card& list = new ArrayList&Card&(); // 保存三张扑克的容器
private JButton nextButton, resetButton, nextThreeB
public GameFrame() {
for(int i = 0; i & filenames. i++) {
GameContext.addImage(names[i], getToolkit().getImage(filenames[i]));
p.shuffle();
this.setTitle(&扑克游戏&);
this.setSize(800, 600);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
// 给窗口设置一个流式布局管理器
this.setLayout(new FlowLayout());
nextButton = new JButton(&下一张&);
nextButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(index & 52) {
currentCard = p.deal(index++);
if(index == 52) {
nextButton.setEnabled(false);
nextThreeButton.setEnabled(false);
resetButton.setEnabled(true);
repaint(); // 重绘窗口
this.add(nextButton);
resetButton = new JButton(&重置&);
resetButton.setEnabled(false);
resetButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
list.clear();
p.shuffle();
index = 0;
currentCard =
resetButton.setEnabled(false);
nextButton.setEnabled(true);
nextThreeButton.setEnabled(true);
repaint();
this.add(resetButton);
nextThreeButton = new JButton(&发三张&);
nextThreeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
currentCard =
list.clear();
for(int i = 1; i &= 3 && index & 52; i++) {
list.add(p.deal(index++));
if(index &= 52) {
nextThreeButton.setEnabled(false);
nextButton.setEnabled(false);
resetButton.setEnabled(true);
repaint();
this.add(nextThreeButton);
public void paint(Graphics g) {
super.paint(g);
if(!initialized) { // 先在窗口不可见区域预先加载图片
for(int i = 0; i & names. i++) {
g.drawImage(GameContext.getImage(names[i]), -1000, -1000, null);
initialized = // 预加载只执行一次
if(currentCard != null) { // 画一张扑克
currentCard.draw(g, 300, 200);
else { // 画三张扑克
for(int i = 0; i & list.size(); i++) {
list.get(i).draw(g, 150 + i * 125, 200);
public static void main(String[] args) {
new GameFrame().setVisible(true);
扑克的执行程序
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4923次
排名:千里之外
(1)(2)(1)(11)(1)&&5726 阅读
思路:给花色赋权重0 13 26 39,排序时某个卡牌的绝对值等于花色+数字,依据这个排序,一次扫描OK。
public class PokerSorter {
// inner class
static class Card {
public String toString(){
String colorString = &&;
String numberString = &&;
switch(color){
case 0 : colorString = &?&;
case 13 : colorString = &?&;
case 26 : colorString = &?&;
: colorString = &?&;
switch(number){
case 11 : numberString = &J&;
case 12 : numberString = &Q&;
case 13 : numberString = &K&;
case 14 : numberString = &A&;
default : numberString = String.valueOf(number);
return colorString + numberS
public static void main(String[] args) {
// cards init
List&Card& cards = new ArrayList&Card&(52);
for (int i = 0; i & 52; i++) {
Card card = new Card();
card.number = i % 13 + 2;
card.color = i / 13 * 13;
cards.add(card);
// cards shuffle
Collections.shuffle(cards);
// print before sort
System.out.println(&排序前:&);
Iterator&Card& cardsIter = cards.iterator();
while(cardsIter.hasNext()){
System.out.print(cardsIter.next());
// cards sort
Collections.sort(cards,new Comparator&Card&(){
public int compare(Card card1, Card card2) {
int weight1 = card1.color + card1.
int weight2 = card2.color + card2.
return weight1 - weight2;
//自己写快排
quickSort(cards, 0, cards.size()-1);
// print after sort
System.out.println(&&);
System.out.println(&排序后:&);
cardsIter = cards.iterator();
while(cardsIter.hasNext()){
System.out.print(cardsIter.next());
后续:2gua提示不能用语言库, 将Collection.sort改为自定义quickSort方法,输出不变。
// partition
public static int partition(List&Card& list, int low, int high) {
// 先以第一个记录为轴
int tmpColor = list.get(low).
int tmpNumber = list.get(low).
// 轴的权重
int weight = list.get(low).color + list.get(low).
while (low & high) {
while (low & high && list.get(high).color + list.get(high).number & weight) {
// 比轴小的移到低端
list.get(low).color = list.get(high).
list.get(low).number = list.get(high).
while (low & high && list.get(low).color + list.get(low).number & weight) {
// 比轴大的移到高端
list.get(high).color = list.get(low).
list.get(high).number = list.get(low).
// 轴记录到位
list.get(low).color = tmpC
list.get(low).number = tmpN
// 返回轴位置
// quick sort
public static void quickSort(List&Card& list, int low, int high) {
if (low & high) {
int middle = partition(list, low, high);
quickSort(list, low, middle - 1);
quickSort(list, middle + 1, high);本帖子已过去太久远了,不再提供回复功能。您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
扑游戏java
扑克游戏.doc 25页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:120 &&
你可能关注的文档:
··········
··········
课程设计说明书
1.课程设计的目的
Java语言的重要概念及其面向对象的特性,使我们能够熟练的应用面向对象的思想和设计方法解决实际问题的能力。
通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。
本设计使用JAVA语言开发扑克游戏程序,将电脑多次分发给你的牌按照相同的花色由大至小排列起来。
2.设计方案论证
2.1设计思路
用java语言,编程实现纸牌游戏,拥有如下规则,将电脑多次分发给你的牌按照相同的花色由大至小排列起来。游戏分为三个难度,简单,普通,困难。简单为单一花色。困难所分发给的牌有四种花色。将大小相邻的纸牌依次排列到一起当每种花色的全部纸牌都按顺序排列到一起,则游戏结束。
2.2设计方法
将程序设计成为4个类,AboutDialog类用于实现全部的对话。PKCard类用于实现游戏的规则。SpiderMenuBar类用于实现各个模块的功能。Spider为主界面。
在SpiderMenuBar建立主界面菜单,通过构造函数public SpiderMenuBar构造函数,生成JMenuBar的图形界面,对菜单中各按钮进行事件监听。在该方法中调用spider
的构造方法,在其中生成SpiderMenuBar对象,并放置在框架之上,同时设置框架标题
课程设计说明书
框架大小背景颜色,布局为空。
public Spider(){
setTitle(&陶时扑克&);
setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
setSize();
setJMenuBar(new SpiderMenuBar(this));
pane = this.getContentPane();
pane.setBackground(new Color(14, 25, 26));
pane.setLayout(null);
clickLabel = new JLabel();
clickLabel.setBounds(883, 606, 121, 96);
pane.add(clickLabel);
在Spider类中有如下方法:newGame新游戏的方法,setGrade设置等级方法,初始化等级方法。setGrade,randomCards随即函数。PKCard getPreviousCard获得card上面的那张牌的方法等。
由PKCard getPreviousCard,PKCard getNextCard,getLastCardLocation方法对类PKCard调用,代码如下:
public PKCard getPreviousCard(PKCard card){
Point point = new Point(card.getLocation());
point.y -= 5;
card = (PKCard) table.get(point);
if (card != null){
point.y -= 15;
card = (PKCard) table.get(point);
课程设计说明书
public PKCard getNextCard(PKCard card){
Point point = new Point(card.getLocation());
point.y += 5;
card = (PKCard) t
正在加载中,请稍后...

我要回帖

更多关于 扑克牌跑得快算法java 的文章

 

随机推荐