今天为大家分享斗地主游戏的开发与制作,目前是单机版游戏,后续时间空了,会给大家分享下联机版本的开发与制作。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步

开发环境

开发语言为Java,开发环境Eclipse或者IDEA都可以。运行主程序,或者执行打开JAR文件即可以运行本程序。

系统框架

利用JDK自带的SWING框架开发,不需要安装第三方JAR包。纯窗体模式,直接运行Main文件即可以。同时带有详细得设计文档

主要功能

启动方法

对Main.java点右键,run as Application,启动24点游戏。

游戏规则

1、发牌:一副牌,留三张底牌,其余发给三家,底牌叫牌后加到地主手中。

2、叫牌:叫牌按出牌顺序轮流开始叫牌,每人只能叫一次,叫牌可叫“1分”、“2分”、“3分”或不叫,所叫的分数为“叫牌的底分”,分数叫的高赢的多,输的也多。叫完后叫的最大分的为地主,如果都选择不叫牌,重新发牌,然后重新开始叫牌。

3、出牌:首先将三张底牌交给地主,三张底牌所有人都能看到。由地主开始出牌,然后按逆时针顺序依次出牌,轮到用户跟牌时,用户可按左上方Pass按钮表示不跟或按Search按规则查找然后按出牌按钮出牌。直至某一方牌出完就结束此局。

4、牌型:火箭:即双王(双鬼牌),什么牌型都可打,是最大的牌。炸弹:四张同数值牌(如四个5)。除火箭和比自己大的炸弹外,什么牌型都可打。单牌(一手牌):单个牌。对牌(一手牌):数值相同的两张牌。三张牌:数值相同的三张牌(如三个10)。三带一手:数值相同的三张牌+一张单牌或一对牌

实现的主要功能

1.生成扑克牌

2.分发牌给赌徒

3 为分发好牌的赌徒排好牌的顺序

4 计算最佳出牌规则

5 判断是否有选手获胜

运行效果

关键代码

package com;import java.awt.Color;
import java.awt.Container;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;public class Main extends JFrame implements ActionListener,Runnable{public Container container = null;// 定义容器JMenuItem start, exit, about;// 定义菜单按钮JButton landlord[]=new JButton[2];//抢地主按钮JButton publishCard[]=new JButton[2];//出牌按钮int dizhuFlag;//地主标志int turn;JLabel dizhu; //地主图标List<Card> currentList[] =new ArrayList[3]; //  当前的出牌List<Card> playerList[] = new ArrayList[3]; // 定义3个玩家表List<Card> lordList;//地主牌Card card[] = new Card[56]; // 定义54张牌JTextField time[]=new JTextField[3]; //计时器Time t; //定时器(线程)boolean nextPlayer=false; //转换角色public Main(){Init();// 初始化SetMenu();// 创建菜单 按钮(抢地主,发牌,计时器)this.setVisible(true);CardInit();//发牌getLord(); //发完牌开始抢地主time[1].setVisible(true);//线程安全性,把非主线程的UI控制放到里面t=new Time(this,10);//从10开始倒计时t.start();}// 抢地主public void getLord(){//System.out.println(CardType.c0.toString());for(int i=0;i<2;i++)landlord[i].setVisible(true);}//初始化牌// 发牌洗牌public void CardInit() {int count = 1;//初始化牌for (int i = 1; i <= 5; i++) {for (int j = 1; j <= 13; j++) {if ((i == 5) && (j > 2))break;else {card[count] = new Card(this, i + "-" + j, false);card[count].setLocation(350, 50);container.add(card[count]);count++;}}}//打乱顺序for(int i=0;i<100;i++){Random random=new Random();int a=random.nextInt(54)+1;int b=random.nextInt(54)+1;Card k=card[a];card[a]=card[b];card[b]=k;}//开始发牌for(int i=0;i<3;i++)playerList[i]=new ArrayList<Card>(); //玩家牌lordList=new ArrayList<Card>();//地主牌三张int t=0;for(int i=1;i<=54;i++){if(i>=52)//地主牌{Common.move(card[i], card[i].getLocation(),new Point(300+(i-52)*80,10));lordList.add(card[i]);continue;}switch ((t++)%3) {case 0://左边玩家Common.move(card[i], card[i].getLocation(),new Point(50,60+i*5));playerList[0].add(card[i]);break;case 1://我Common.move(card[i], card[i].getLocation(),new Point(180+i*7,450));playerList[1].add(card[i]);card[i].turnFront(); //显示正面break;case 2://右边玩家Common.move(card[i], card[i].getLocation(),new Point(700,60+i*5));playerList[2].add(card[i]);break;}//card[i].turnFront(); //显示正面container.setComponentZOrder(card[i], 0);}//发完牌排序,从大到小for(int i=0;i<3;i++){Common.order(playerList[i]);Common.rePosition(this,playerList[i],i);//重新定位}dizhu=new JLabel(new ImageIcon("images/dizhu.gif"));dizhu.setVisible(false);dizhu.setSize(40, 40);container.add(dizhu);}// 初始化窗体public void Init() {this.setTitle("斗地主游戏---帮写代码网");this.setSize(830, 620);setResizable(false);setLocationRelativeTo(getOwner()); // 屏幕居中container = this.getContentPane();container.setLayout(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);container.setBackground(new Color(0, 112, 26)); // 背景为绿色}// 创建菜单 功能按钮public void SetMenu() {JMenuBar jMenuBar = new JMenuBar();JMenu game = new JMenu("游戏");JMenu help = new JMenu("帮助");start = new JMenuItem("新游戏");exit = new JMenuItem("退出");about = new JMenuItem("关于");start.addActionListener(this);exit.addActionListener(this);about.addActionListener(this);game.add(start);game.add(exit);help.add(about);jMenuBar.add(game);jMenuBar.add(help);this.setJMenuBar(jMenuBar);landlord[0]=new JButton("抢地主");landlord[1]=new JButton("不     抢");publishCard[0]= new JButton("出牌");publishCard[1]= new JButton("不要");for(int i=0;i<2;i++){publishCard[i].setBounds(320+i*100, 400, 60, 20);landlord[i].setBounds(320+i*100, 400,75,20);container.add(landlord[i]);landlord[i].addActionListener(this);landlord[i].setVisible(false);container.add(publishCard[i]);publishCard[i].setVisible(false);publishCard[i].addActionListener(this);}for(int i=0;i<3;i++){time[i]=new JTextField("倒计时:");time[i].setVisible(false);container.add(time[i]);}time[0].setBounds(140, 230, 60, 20);time[1].setBounds(374, 360, 60, 20);time[2].setBounds(620, 230, 60, 20);for(int i=0;i<3;i++){currentList[i]=new ArrayList<Card>();}}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif (e.getSource() == exit) {this.dispose();}if (e.getSource() == about) {JOptionPane.showMessageDialog(this, "帮写代码网!!");}if (e.getSource() == start) {// this.restart();}if(e.getSource()==landlord[0]){time[1].setText("抢地主");t.isRun=false; //时钟终结}if(e.getSource()==landlord[1]){time[1].setText("不抢");t.isRun=false; //时钟终结}//如果是不要if(e.getSource()==publishCard[1]){this.nextPlayer=true;currentList[1].clear();time[1].setText("不要") ;}//如果是出牌按钮if(e.getSource()==publishCard[0]){List<Card> c=new ArrayList<Card>();//点选出牌for(int i=0;i<playerList[1].size();i++){Card card=playerList[1].get(i);if(card.clicked){c.add(card);}}int flag=0;//如果我主动出牌if(time[0].getText().equals("不要")&&time[2].getText().equals("不要")){if(Common.jugdeType(c)!=CardType.c0)flag=1;//表示可以出牌}//如果我跟牌else{flag=Common.checkCards(c,currentList,this);}//判断是否符合出牌if(flag==1){currentList[1]=c;playerList[1].removeAll(currentList[1]);//移除走的牌//定位出牌Point point=new Point();point.x=(770/2)-(currentList[1].size()+1)*15/2;;point.y=300;for(int i=0,len=currentList[1].size();i<len;i++){Card card=currentList[1].get(i);Common.move(card, card.getLocation(), point);point.x+=15;}//抽完牌后重新整理牌Common.rePosition(this, playerList[1], 1);time[1].setVisible(false);this.nextPlayer=true;}}}public static void main(String args[]) {new Thread(new Main()).start();}@Overridepublic void run() {// TODO Auto-generated method stub}}

Java 编写斗地主游戏 窗体程序 完整源码相关推荐

  1. Java 编写大鱼吃小鱼游戏 窗体程序 完整源码

    今天为大家分享大鱼吃小鱼游戏开发与制作.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 开发语言为Java,开发环境Eclipse或者IDEA都可 ...

  2. Java 编写潜艇大战游戏 窗体程序 完整源码

    今天为大家分享潜艇大战的开发与制作.整个系统界面漂亮,有完整源码提供,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 开发语言为Java,开发环境Eclipse或者IDEA都可以 ...

  3. Java 编写捕鱼达人游戏 窗体程序 完整源码

    今天为大家分享捕鱼达人游戏的开发与制作,目前是单机版游戏,后续时间空了,会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 开发语言为J ...

  4. Java 编写飞鸽传书系统 窗体程序 完整源码

    今天为大家分享简单的飞鸽传书程序的开发与制作,目前系统已经完成了初步功能,后续会进一步完善.整个系统界面漂亮,有完整源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 开发语言 ...

  5. 「 硬核教学」 ❤️ C语言编写扫雷游戏外挂❤️「 完整源码」

    目录 第一步:使用CE找出棋盘的基址 第二步:使用CE/OD查看该地址的数据 第三步:对比棋盘分析数据的含义 第四步:验证猜想 第五步:编写功能 有没有羡慕学霸们在机房里 潇洒如意地玩着扫雷无限通关, ...

  6. C++开发网络版斗地主游戏,附完整源码

    单机版斗地主扑克牌游戏.这款游戏拥有强大的AI以及智能的提示功能.玩家的对手是高度智能的电脑玩家,其特点是智能的提示机制和免费获得实用的记牌器功能,玩家不用记所出的牌.此外,此款游戏还拥有精美的界面, ...

  7. Java 编写在线考试系统-049 窗体程序 完整源码

    今天为大家分享一个java语言编写的在线考试系统-049,目前系统功能已经很全面,后续会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 ...

  8. Java 编写航班查询系统 窗体程序 完整源码

    开发环境 开发语言为Java,开发环境Eclipse或者IDEA都可以.数据库采用:MySQL.运行主程序,或者执行打开JAR文件即可以运行本程序. 系统框架 利用JDK自带的SWING框架开发,需要 ...

  9. Java 公司财务系统 窗体程序 完整源码

    今天为大家分享一个java语言编写的公司财务管理系统,目前系统已经完成了主要功能,后续会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 ...

最新文章

  1. Thymeleaf 中js 使用等报错问题
  2. python好学-所有人都说Python 简单易学,为何你觉得难?
  3. matlab 计算大型距离方阵,distance matrix
  4. 【SSH】禁用root远程、修改ssh端口
  5. 《机器学习》 —— 第一章:绪论 学习笔记
  6. 趣头条基于 Flink 的实时平台建设实践
  7. 漫画:学习中台,看这篇就够了
  8. Android Native C Log
  9. 华为c8818刷原生Android 6,华为C8818(电信4G)一键救砖教程,轻松刷回官方系统
  10. sdut 2878 圆圈
  11. MySQL Server 安装失败
  12. 生成n*n蛇形矩阵的算法
  13. 在这个520特别的日子里,分享几个用的上的Python代码
  14. apk改之理简单教程
  15. matlab simulink节点,ROS与Matlab语言入门教程-从Simulink中创建单独的ROS节点
  16. HTML小游戏2—— 2048网页版(附完整源码)
  17. 入门版Linux上恢复误删除的文件
  18. VScode中txt文件乱码解决
  19. CC2591和RFX2401C在zstack中的设置
  20. Excel表格数据丢失,怎样能恢复?

热门文章

  1. Go语言专题:程序测试-欧阳桫-专题视频课程
  2. centos7 mysql主从同步
  3. java entryset循环_HashMap遍历的两种方式,推荐使用entrySet() 冬蒽
  4. TCP/IP——ICMP
  5. 论文绘图——标量图篇
  6. 机器学习中的数学——深度学习优化的挑战:局部极小值
  7. 使用UpdateLayeredWindow的窗口在某些系统上显示不出来的一个可能原因
  8. 用STATECAD快速设计有限状态机
  9. java excel导入jsp_jsp页面导入excel文件的步骤及配置
  10. 《老赵手动整理的Python笔记(一)》