JAVA课程设计扑克游戏Word文档下载推荐.docx
《JAVA课程设计扑克游戏Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计扑克游戏Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
setSize(1024,742);
setJMenuBar(newSpiderMenuBar(this));
pane=this.getContentPane();
pane.setBackground(newColor(14,25,26));
pane.setLayout(null);
clickLabel=newJLabel();
clickLabel.setBounds(883,606,121,96);
pane.add(clickLabel);
}
在Spider类中有如下方法:
newGame新游戏的方法,setGrade设置等级方法,初始化等级方法。
setGrade,randomCards随即函数。
PKCardgetPreviousCard获得card上面的那张牌的方法等。
由PKCardgetPreviousCard,PKCardgetNextCard,getLastCardLocation方法对类PKCard调用,代码如下:
publicPKCardgetPreviousCard(PKCardcard){
Pointpoint=newPoint(card.getLocation());
point.y-=5;
card=(PKCard)table.get(point);
if(card!
=null){
returncard;
}
point.y-=15;
课程设计说明书NO.3
publicPKCardgetNextCard(PKCardcard){
point.y+=5;
card=(PKCard)table.get(point);
=null)
point.y+=15;
returncard;
publicPointgetLastCardLocation(intcolumn){
Pointpoint=newPoint(20+column*101,25);
PKCardcard=(PKCard)this.table.get(point);
if(card==null)returnnull;
while(card!
point=card.getLocation();
card=this.getNextCard(card);
}
returnpoint;
publicPointgetGroundLabelLocation(intcolumn){
returnnewPoint(groundLabel[column].getLocation());
publicvoidsetGroundLabelZOrder(){
for(inti=0;
i<
10;
i++){
课程设计说明书NO.4
pane.setComponentZOrder(groundLabel[i],105+i);
2.3功能模块图
图1功能模块图
课程设计说明书NO.5
2.4程序流程图
图2程序流程图
3.设计结果与分析
(1)首先是对游戏中主菜单的设计,设计的菜单包括两个大部分,选项和帮助,如图3所示:
课程设计说明书NO.6
图3显示菜单
通过如下代码实现:
JMenujNewGame=newJMenu("
选项"
JMenujHelp=newJMenu("
帮助"
(2)在选项菜单下面包含7级子菜单,如图4所示:
图4显示菜单
课程设计说明书NO.7
JMenuItemjItemOpen=newJMenuItem("
开局"
JMenuItemjItemPlayAgain=newJMenuItem("
重发牌"
JRadioButtonMenuItemjRMItemEasy=newJRadioButtonMenuItem("
简单"
JRadioButtonMenuItemjRMItemNormal=newJRadioButtonMenuItem("
较难"
JRadioButtonMenuItemjRMItemHard=newJRadioButtonMenuItem("
困难"
;
JMenuItemjItemExit=newJMenuItem("
退出"
JMenuItemjItemValid=newJMenuItem("
显示可执行行操作"
(3)帮助下面包含2级子菜单,分别为游戏规则和声明,如图5所示:
图5显示帮助
JTabbedPanejTabbedPane=newJTabbedPane();
privateJPaneljPanel1=newJPanel();
privateJPaneljPanel2=newJPanel();
(4)主窗体通过类Spider实现。
将窗体名称设置为“陶时扑克”,框架的大小设置为1024*742,背景颜色设置为黑色,布局管理设置为空,通过如下代码实现:
课程设计说明书NO.8
publicSpider()
{
setTitle("
setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
setSize(1024,742);
setJMenuBar(newSpiderMenuBar(this));
pane.setBackground(newColor(14,25,26));
pane.setLayout(null);
(5)进入游戏之后,首先选择开始新游戏,通过类Spider调用它的方法newGame方法,采用随机函数随机初始化牌的顺序(这样做的目的是,使游戏性增加可玩性,使每次出现牌的顺序不同),如图6所示。
图6进入新游戏界面
用如下代码实现:
publicvoidnewGame(){
this.randomCards();
this.setCardsLocation();
this.setGroundLabelZOrder();
this.deal();
publicintgetC(){
returnc;
publicvoidsetGrade(intgrade){
this.grade=grade;
publicvoidinitCards(){
if(cards[0]!
104;
pane.remove(cards[i]);
intn=0;
if(this.grade==Spider.EASY){
n=1;
elseif(this.grade==Spider.NATURAL){
n=2;
else{
n=4;
for(inti=1;
=8;
i++)
课程设计说明书NO.9
for(intj=1;
j<
=13;
j++){
cards[(i-1)*13+j-1]=newPKCard((i%n+1)+"
-"
+j,this);
this.randomCards();
publicvoidrandomCards(){
PKCardtemp=null;
52;
inta=(int)(Math.random()*104);
intb=(int)(Math.random()*104);
temp=cards[a];
cards[a]=cards[b];
cards[b]=temp;
(6)在游戏界面的右下角做一张图片,显示扑克牌的背面,同时点击图片,系统自动发牌(当游戏无法继续的时候,可以点击该图片,在每副纸牌上发一张牌,使得进入僵局的纸牌游戏得以继续进行),运行界面如图7,图8所示。
课程设计说明书NO.10
图7发牌功能界面
图8显示发牌
课程设计说明书NO.11
首先在界面上添加纸牌背面的图片:
publicvoidturnRear(){
this.setIcon(newImageIcon("
images/6.gif"
));
this.isFront=false;
this.canMove=false;
point.y-=15;
returncard;
publicPKCardgetNextCard(PKCardcard){
if(card!
课程设计说明书NO.12
publicPointgetLastCardLocation(intcolumn){
publicPointgetGroundLabelLocation(intcolumn){
publicvoidsetGroundLabelZOrder(){
pane.setComponentZOrder(groundLabel[i],105+i);
(7)在游戏中每次开始游戏都由程序随机发牌,发牌的过程是,先设置纸牌的初始位置由随机函数产生,并随机生成牌号,设置纸牌的位置,初始化待展开的纸牌,将纸牌放置到固定位置(这里调用PKcard类中的setNextCardLocation方法调用图片文件夹里的纸牌图片),如图9,图10所示。
课程设计说明书NO.13
图9图片库
图10图片被载入
课程设计说明书NO.14
使用如下代码实现:
for(inti=0;
6;
for(intj=0;
intn=i*10+j;
pane.add(cards[n]);
cards[n].turnRear();
cards[n].moveto(newPoint(x,y));
table.put(newPoint(x,y),cards[n]);
x+=10;
x=20;
y=45;
for(inti=10;
i>
5;
i--){
if(n>
=104)continue;
pane.add(cards[n]);
cards[n].turnRear();
cards[n].moveto(newPoint(x,y));
table.put(newPoint(x,y),cards[n]);
x+=101;
y-=5;
课程设计说明书NO.15
publicvoidshowEnableOperator(){
intx=0;
out:
while(true){
Pointpoint=null;
PKCardcard=null;
do{
if(point!
n++;
}
point=this.getLastCardLocation(n);
while(point==null){
point=this.getLastCardLocation(++n);
if(n==10)n=0;
x++;
if(x==10)breakout;
card=(PKCard)this.table.get(point);
while(!
card.isCardCanMove());
while(this.getPreviousCard(card)!
=null&
&
this.getPreviousCard(card).isCardCanMove()){
card=this.getPreviousCard(card);
if(a==10){
a=0;
for(;
a<
a++){
if(a!
=n){
课程设计说明书NO.16
Pointp=null;
PKCardc=null;
if(p!
a++;
}
p=this.getLastCardLocation(a);
intz=0;
while(p==null){
p=this.getLastCardLocation(++a);
if(a==10)a=0;
if(a==n)a++;
z++;
if(z==10)breakout;
c=(PKCard)this.table.get(p);
c.isCardCanMove());
if(c.getCardValue()==card.getCardValue()+1){
card.flashCard(card);
try{
Thread.sleep(800);
catch(InterruptedExceptione){
e.printStackTrace();
c.flashCard(c);
课程设计说明书NO.17
a++;
n++;
breakout;
n++;
if(n==10){
n=0;
if(x==10){
breakout;
通过调用如下代码实现图片的调用:
publicvoidsetNextCardLocation(Pointpoint){
PKCardcard=main.getNextCard(this);
if(point==null){
card.setNextCardLocation(null);
main.table.remove(card.getLocation());
card.setLocation(card.initPoint);
main.table.put(card.initPoint,card);
课程设计说明书NO.18
else{
point=newPoint(point);
point.y+=20;
card.setNextCardLocation(point);
point.y-=20;
card.setLocation(point);
main.table.put(card.getLocation(),card);
card.initPoint=card.getLocation();
(8)进入游戏之后能对游戏的难度进行选择,难度分为三种,分别为简单,较难,困难,简单为单一花色的纸牌进行游戏,而较难和困难的纸牌花色相应的增多。
在设计时首先在SpiderMenuBar类中,将三种难度的菜单实现,然后通过调用PKcard的方法实现各难度的功能,如图11,12所示。
课程设计说明书NO.19
图11难度选择
图12选择困难
课程设计说明书NO.20
实现菜单分成三种难度:
JRadioButtonMenuItemjRMItemNormal=newJRadioButtonMenuItem("
jRMItemEasy.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEvente){
main.setGrade(Spider.EASY);
main.initCards();
main.newGame();
分别对菜单进行事件监听,若选中相应的难度登记则触发Spider类中的方法进行实现:
jRMItemNormal.addActionListener(newjava.awt.event.ActionListener(){
main.setGrade(Spider.NATURAL);
jRMItemHard.addActionListener(newjava.awt.event.Acti