项目要求:

一个窗口实现无序发放52张扑克牌;另一个窗口实现记录打出的扑克牌


Poke类


public class Poke {String name[] = { "fang", "hong", "mei", "hei" };String a[] = new String[52];String b[] = new String[52];String c[] = new String[13];String d[] = new String[13];String e[] = new String[52];public void 生成牌() {int k = 0;for (int i = 0; i < 4; i++) {for (int j = 1; j <= 13; j++) {a[k] = name[i] + j;k++;}}}public void 打印牌(String[] p) {int cout = 0;for (int i = 0; i < p.length; i++) {System.out.print(p[i]+"   ");cout++;if (cout % 13 == 0 && cout != 0) {System.out.println(" ");}}}public void 打乱牌() {int m, n;String flag[]= {"0"};System.arraycopy(a, 0, b, 0, a.length);for (int i = 0; i < 100; i++) {m = (int) (Math.random() * 52);n = (int) (Math.random() * 52); //生成随机数flag[0] = b[m];b[m] = b[n];b[n] = flag[0];//交换两个值}}public void 抽取牌(int startnum,int endnum) {for(int i=startnum,k=0;i<=endnum&&k<=12;i++,k++) {c[k]=b[i];//k的定义是为了覆盖原来c数组的内容,因为c数组的长度只有13}}public void 排序牌() {int flagk=0;for(int i=0;i<52;i++) {for(int j=0;j<13;j++) {if(a[i]==c[j]) {d[flagk++]=a[i];} }}}public String[] 组合牌() {int flag1=0;int flag2=0;int flag3=0;int flag4=0;//因为d数组长度只有13,所以每次调用需要覆盖原来的数组抽取牌(0,12);排序牌();for(int i=0;i<=12;i++) {e[i]=d[flag1++];}//第一次抽取牌(13,25);排序牌();for(int i=13;i<=25;i++) {e[i]=d[flag2++];} //第二次抽取牌(26,38);排序牌();for(int i=26;i<=38;i++) {e[i]=d[flag3++];}  //第三次抽取牌(39,51);排序牌();for(int i=39;i<=51;i++) {e[i]=d[flag4++];}//第四次return e;//返回数组}public static void main(String[] args) {Poke poke = new Poke();poke.生成牌();poke.打乱牌();poke.组合牌();poke.打印牌(poke.e);}
}

PokeFrame类


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class PokeFrame extends JInternalFrame {JLayeredPane jp;JLabel jl;Toolkit tk;JButton[] jb = new JButton[13];JButton cp;int xx, yy;int ps = 13;int ceng = 2;int ph, pw, px, py, zw, pxd;String[] s = new String[52];String s1;PlayBuffer pb1;int index;public PokeFrame(int w, int h, int k, String[] f, PlayBuffer pb) {ImageIcon bj;tk = Toolkit.getDefaultToolkit();bj = new ImageIcon("img/bj.jpg");JLabel jl = new JLabel(bj);jl.setSize(w, h);jp = this.getLayeredPane();jp.add(jl, new Integer(-100));this.添加牌(w, h, 0.8, 0.6, 0.2, k, f);System.arraycopy(f, 0, s, 0, f.length);pb1 = pb;index = k;//记录窗口对应的玩家}public void 添加牌(int cw, int ch, double r1, double r2, double r3, int k, String[] f) {//r1为13张扑克牌所占窗口比例//r2为扑克牌的显示部分占单个牌的比例//r3为扑克牌上端至窗口上端的高度占窗口的比例double r = 134d / 201d;zw = (int) (cw * r1);//扑克牌占窗口的长度pw = (int) (zw / (r2 * 12 + 1));//单个扑克牌的宽度ph = (int) (pw / r);px = (int) (cw * (1 - r1) / 2);py = (int) (ch - ph - ch * r3);pxd = (int) (pw * r2);xx = (int) (cw / 2);yy = (int) (ch / 2);监听器 jt = new 监听器();cp = new JButton("出牌");cp.setBounds(50, yy - 100, 80, 50);jp.add(cp, new Integer(1));cp.setVisible(false);cp.addActionListener(jt);for (int i = 0; i < 13; i++) {Image img = tk.getImage("img/" + f[k * 13 + i] + ".jpg");//从MyFrame类传入参数kimg = img.getScaledInstance(pw, ph, Image.SCALE_SMOOTH);ImageIcon pkimg = new ImageIcon(img);jb[i] = new JButton(pkimg);jb[i].setBounds(px + pxd * i, py, pw, ph);jb[i].setName(f[k * 13 + i]);jp.add(jb[i], new Integer(i));jb[i].addActionListener(jt);}}class 监听器 implements ActionListener {JButton clickButton, selectButton = null;int n;int x, y, w, h;int x1, y1;public void actionPerformed(ActionEvent e) {if (e.getSource() == cp) {selectButton.setBounds(xx, yy - h, w, h);jp.add(selectButton, new Integer(ceng));selectButton = null;for (int i = n; i < ps - 1; i++) {jb[i] = jb[i + 1];jb[i].setBounds(px + pxd * i, py, pw, ph);}ps--;ceng++;System.out.println("index=" + index);pb1.reciverPlayerNum(index);//必须先传入玩家的序号即index,若与下列reciver函数调换顺序则会出现错误pb1.reciver(clickButton.getName());//将点击的牌传回PlayeBuffer中pb1.compareNum();//比较当前回合四张牌的大小} else {if (pb1.returnNum() == index) {点击牌(e);}//当窗口玩家与轮到的玩家相对应时才能点牌}}public void 点击牌(ActionEvent e) {for (int i = 0; i < 13; i++) {if (e.getSource() == jb[i]) {n = i;clickButton = jb[i];break;}}x = clickButton.getX();y = clickButton.getY();w = clickButton.getWidth();h = clickButton.getHeight();if (clickButton == selectButton) {clickButton.setBounds(x, y + 30, w, h);selectButton = null;cp.setVisible(false);} else {if (selectButton == null) {clickButton.setBounds(x, y - 30, w, h);selectButton = clickButton;cp.setVisible(true);} else {clickButton.setBounds(x, y - 30, w, h);x1 = selectButton.getX();y1 = selectButton.getY();selectButton.setBounds(x1, y1 + 30, w, h);selectButton = clickButton;cp.setVisible(true);}}}}
}

PlayBuffer类


import javax.swing.*;
import java.awt.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class PlayBuffer {JFrame jf1;JButton[][] jb = new JButton[14][4];int Player;int player1 = 1, player2 = 1, player3 = 1, player4 = 1;int flag = 0;int num[][] = new int[14][4];int rand = 0;boolean pd = false;public PlayBuffer() {jf1 = new JFrame("记录窗口");jf1.setExtendedState(JFrame.MAXIMIZED_BOTH);jf1.setLayout(new GridLayout(14, 4));jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Font f = new Font("宋体", Font.BOLD, 36);for (int i = 0; i < 14; i++) {for (int j = 0; j < 4; j++) {jb[i][j] = new JButton();jb[i][j].setFont(f);jf1.add(jb[i][j]);}}for (int j = 0; j < 4; j++) {jb[0][j].setText("玩家" + (j + 1));}jf1.setVisible(true);}public void reciverPlayerNum(int index) {//得到当前对应的玩家Player = index;System.out.println("Player=" + Player);}public void reciver(String s) {if (Player == 0) {jb[player1++][Player].setText(s);System.out.println("reciverPlayer=" + Player);} else if (Player == 1) {jb[player2++][Player].setText(s);System.out.println("reciverPlayer=" + Player);} else if (Player == 2) {jb[player3++][Player].setText(s);System.out.println("reciverPlayer=" + Player);} else if (Player == 3) {jb[player4++][Player].setText(s);System.out.println("reciverPlayer=" + Player);}this.PokeNum(s);if (Player == 3) {pd = true;System.out.println("pd=" + pd);rand++;}flag = (flag + 1) % 4;}public int returnNum() {return flag;}public int PokeNum(String poke) {//将牌中的数字提取出来String k;int x;String regEx = "[^0-9]";Pattern p = Pattern.compile(regEx);Matcher m = p.matcher(poke);k = m.replaceAll("").trim();x = Integer.parseInt(k);return x;}public void compareNum() {//比较四张牌的大小int max = 0;int maxNum = 0;int minNum = 0;if (pd == true) {System.out.println("rand=" + rand);for (int i = 0; i < 4; i++) {System.out.print(PokeNum(jb[rand][i].getText()) + " ");minNum = PokeNum(jb[rand][i].getText());if (maxNum < minNum) {maxNum = minNum;max = i;}}jb[rand][max].setBackground(Color.PINK);System.out.println(" ");}pd = false;}
}

Mframe类

//主类
import java.awt.*;
import javax.swing.*;public class MyFrame {JFrame jf;Toolkit tk;int w, h;int sw, sh;PokeFrame[] jif = new PokeFrame[4];String a[] = new String[52];String b[] = new String[13];PlayBuffer pb = new PlayBuffer();public void 得到牌() {Poke pk = new Poke();//同包不同类的调用pk.生成牌();pk.打乱牌();a = pk.组合牌();pk.打印牌(a);System.arraycopy(a, 0, b, 0, 13);}public MyFrame() {this.得到牌();//在主函数内调用得到牌函数,避免对象重复调用jf = new JFrame("扑克窗体");tk = Toolkit.getDefaultToolkit();w = tk.getScreenSize().width;h = tk.getScreenSize().height;sw = (int) (w / 2);sh = (int) (h / 2);jf.setSize(w, h);jf.setLayout(new GridLayout(2, 2));for (int i = 0; i < 4; i++) {jif[i] = new PokeFrame(sw, sh, i, a, pb);jif[i].setTitle("玩家" + (i + 1));jif[i].setVisible(true);jf.add(jif[i]);}jf.setVisible(true);}public static void main(String[] args) {MyFrame mf1 = new MyFrame();}
}

效果实现:

扑克牌及背景图片链接:

phttps://pan.baidu.com/s/1I7uo6T_eryZwpoDfD7XMqw

提取码:1a1a

Java小项目实训——扑克牌相关推荐

  1. 【Java小项目实训】编写一个窗体程序模拟单词拼写

    实训要求 窗口中有一个TextFie1d对象和一个按钮对象,将这两个对象添加到一个面板中,然后将该面板添加到窗口的北面.用户在TextField 对象中输入一个英文单词,然后回车或单击按钮,程序将创建 ...

  2. 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第二十四节:小项目实训《绝命沙滩》

    <使用Cocos2d-x 开发3D游戏>系列在线课程 第二十四节:小项目实训<绝命沙滩> 视频地址:http://edu.csdn.net/course/detail/1330 ...

  3. java小游戏实训报告心得_Java实训报告-扫雷.doc

    Java实训报告-扫雷 实训报告书 实训名称: JAVA程序设计实训 系 (部): 信息工程系 专业班级: 计算机科学与技术08-1 学生姓名: 学 号: 指导教师: 完成日期: 山东科技大学泰山科技 ...

  4. java 小项目:简单扑克牌游戏

    项目要求 1>新建两个玩家 2>创建扑克牌,洗牌 3>发牌,每个玩家没人拿两张,比较大小 4>比较规则:两个玩家选出各种最大的牌,进行游戏,先比较点数大小,点数大的获胜,点数相 ...

  5. java小游戏实训目的_Java弹球小游戏实验报告.doc

    Java弹球小游戏实验报告 滨江学院 Java程序设计实验报告 题 目 弹球小游戏 姓 名 许浩 学 号 20112346064 学 院 滨江学院 专 业 网络工程 年 级 2011级 指导教师 张舒 ...

  6. java 实训项目_实训方案(JavaWeb项目实训)-

    实训方案(JavaWeb项目实训)- 2012-2013学年第一学期 <Java Web项目开发实训>课程实施方案 课程名称(英文):Training of Java Web Projec ...

  7. java质数和合数的程序_《java项目实训》课程设计计算器.doc

    <java项目实训>课程设计计算器.doc 课程设计报告课程名称JAVA项目实训课程设计设计名称基于JAVA计算器的设计与实现学生学号学生姓名学生学号学生姓名学生学号学生姓名学生学号学生姓 ...

  8. java编码规范文档 下载_软件项目实训及课程设计指导——制定待开发项目中各种文档的规范...

    软件项目实训及课程设计指导--制定待开发项目中各种形式文档的规范 1.制定对课程设计项目开发过程中的规范性要求 (1)从"形式"到"内容"两个方面控制和要求开发 ...

  9. web前端小项目个人实例_Web前端:小程序界面与逻辑项目实训

    大家好,我来了!本期为大家带来的Web前端学习知识是"Web前端:小程序界面与逻辑项目实训",喜欢Web前端的小伙伴,一起看看吧! 主要内容 数据绑定 渲染 界面层数据渲染 事件处 ...

最新文章

  1. 如何很好的使用Linq的Distinct方法
  2. 【408预推免复习】计算机组成原理之计算机系统概论
  3. Time zone BOGUS not found in registry
  4. 跟着JAMA论文学习重复测量资料分析方法
  5. java成绩管理系统论文总结,JAVA论文成绩管理系统课程设计
  6. 小余学调度:学习记录(2021.10月)
  7. MFC中OnTimer函数的使用方法
  8. 开环直流电机的机械特性_无刷直流电动机的开环调速机械特性研究
  9. 十大经典排序算法之冒泡排序【一】
  10. mysql-front5.1的注册码
  11. [xdoj1227]Godv的数列(crt+lucas)
  12. EXCEL VBA 操作图表
  13. 微信公众平台开发接口返回码说明
  14. Windows7 professional 64安装英文语言包
  15. 带计算机功能的私有云,网盘关停不用愁 教你打造个人私有云
  16. 上市一再受阻,“微医”再融资4亿美元就能敲开“港股”大门?
  17. 安装watchdog监控系统
  18. 装了冰点还原如何修改计算机ip,冰点还原软件如何使用
  19. 通达OA 办公系统(Office Anywhere)动态密码配置使用详解
  20. android sqlite3设置密码,sqlite3 加密

热门文章

  1. 生命周期--艺术探索
  2. 无人机1:2000正射影像+部分主要区三维倾斜模型
  3. 程序8 VC++编写视频去水印工具
  4. 区块链开发语言python_6种最常见的区块链编程语言
  5. 风险价值法(VAR)
  6. GitHub上最火的22个Android开源项目源码(最少的一个也超过10k star)
  7. (BDCI-CCF)出租车发票识别
  8. “网管”必备的五大网络数据分析工具
  9. 【锐普PPT教程】用powerpoint2010实现PPT转视频方法介绍
  10. 6位顺序号生成_短网址是怎么生成的?代码献上