
正文
蜘蛛纸牌java程序代码 蜘蛛纸牌java程序代码是什么
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
帮忙给个java小游戏源程序
这是一个贪食蛇的程序,仅供参考(多给点分吧,代码注释非常详细,给100分就很满足了):
/**************************************************************************
*要点分析:
*1)主要部分已经集成为一个对象SnakeModel,利用键盘控制实现操作。
*************************************************************************/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
//=============================================
//Main Class
//=============================================
public class GreedSnake implements KeyListener
{
JFrame mainFrame;
Canvas paintCanvas;
JLabel labelScore;//计分牌
SnakeModel snakeModel=null;// 蛇
public static final int canvasWidth=200;
public static final int canvasHeight=300;
public static final int nodeWidth=10;
public static final int nodeHeight=10;
//----------------------------------------------------------------------
//GreedSnake():初始化游戏界面
//----------------------------------------------------------------------
public GreedSnake()
{
//设置界面元素
mainFrame=new JFrame("GreedSnake");
Container cp=mainFrame.getContentPane();
labelScore=new JLabel("Score:");
cp.add(labelScore,BorderLayout.NORTH);
paintCanvas=new Canvas();
paintCanvas.setSize(canvasWidth+1,canvasHeight+1);
paintCanvas.addKeyListener(this);
cp.add(paintCanvas,BorderLayout.CENTER);
JPanel panelButtom=new JPanel();
panelButtom.setLayout(new BorderLayout());
JLabel labelHelp;// 帮助信息
labelHelp=new JLabel("PageUp, PageDown for speed;",JLabel.CENTER);
panelButtom.add(labelHelp,BorderLayout.NORTH);
labelHelp=new JLabel("ENTER or R or S for start;",JLabel.CENTER);
panelButtom.add(labelHelp,BorderLayout.CENTER);
labelHelp=new JLabel("SPACE or P for pause",JLabel.CENTER);
panelButtom.add(labelHelp,BorderLayout.SOUTH);
cp.add(panelButtom,BorderLayout.SOUTH);
mainFrame.addKeyListener(this);
mainFrame.pack();
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);
begin();
}
//----------------------------------------------------------------------
//keyPressed():按键检测
//----------------------------------------------------------------------
public void keyPressed(KeyEvent e)
{
int keyCode=e.getKeyCode();
if(snakeModel.running) switch(keyCode)
{
case KeyEvent.VK_UP:
snakeModel.changeDirection(SnakeModel.UP);
break;
case KeyEvent.VK_DOWN:
snakeModel.changeDirection(SnakeModel.DOWN);
break;
case KeyEvent.VK_LEFT:
snakeModel.changeDirection(SnakeModel.LEFT);
break;
case KeyEvent.VK_RIGHT:
snakeModel.changeDirection(SnakeModel.RIGHT);
break;
case KeyEvent.VK_ADD:
case KeyEvent.VK_PAGE_UP:
snakeModel.speedUp();// 加速
break;
case KeyEvent.VK_SUBTRACT:
case KeyEvent.VK_PAGE_DOWN:
snakeModel.speedDown();// 减速
break;
case KeyEvent.VK_SPACE:
case KeyEvent.VK_P:
snakeModel.changePauseState();// 暂停或继续
break;
default:
}
//重新开始
if(keyCode==KeyEvent.VK_R || keyCode==KeyEvent.VK_S
|| keyCode==KeyEvent.VK_ENTER)
{
snakeModel.running=false;
begin();
}
}
//----------------------------------------------------------------------
//keyReleased():空函数
//----------------------------------------------------------------------
public void keyReleased(KeyEvent e)
{
}
//----------------------------------------------------------------------
//keyTyped():空函数
//----------------------------------------------------------------------
public void keyTyped(KeyEvent e)
{
}
//----------------------------------------------------------------------
//repaint():绘制游戏界面(包括蛇和食物)
//----------------------------------------------------------------------
void repaint()
{
Graphics g=paintCanvas.getGraphics();
//draw background
g.setColor(Color.WHITE);
g.fillRect(0,0,canvasWidth,canvasHeight);
//draw the snake
g.setColor(Color.BLACK);
LinkedList na=snakeModel.nodeArray;
Iterator it=na.iterator();
while(it.hasNext())
{
Node n=(Node)it.next();
drawNode(g,n);
}
// draw the food
g.setColor(Color.RED);
Node n=snakeModel.food;
drawNode(g,n);
updateScore();
}
//----------------------------------------------------------------------
//drawNode():绘画某一结点(蛇身或食物)
//----------------------------------------------------------------------
private void drawNode(Graphics g,Node n)
{
g.fillRect(n.x*nodeWidth,n.y*nodeHeight,nodeWidth-1,nodeHeight-1);
}
//----------------------------------------------------------------------
//updateScore():改变计分牌
//----------------------------------------------------------------------
public void updateScore()
{
String s="Score: "+snakeModel.score;
labelScore.setText(s);
}
//----------------------------------------------------------------------
//begin():游戏开始,放置贪吃蛇
//----------------------------------------------------------------------
void begin()
{
if(snakeModel==null||!snakeModel.running)
{
snakeModel=new SnakeModel(this,canvasWidth/nodeWidth,
this.canvasHeight/nodeHeight);
(new Thread(snakeModel)).start();
}
}
//----------------------------------------------------------------------
//main():主函数
//----------------------------------------------------------------------
public static void main(String[] args)
{
GreedSnake gs=new GreedSnake();
}
}
/**************************************************************************
*要点分析:
*1)数据结构:matrix[][]用来存储地图上面的信息,如果什么也没有设置为false,
* 如果有食物或蛇,设置为true;nodeArray,一个LinkedList,用来保存蛇的每
* 一节;food用来保存食物的位置;而Node类是保存每个位置的信息。
*2)重要函数:
* changeDirection(int newDirection) ,用来改变蛇前进的方向,而且只是
* 保存头部的前进方向,因为其他的前进方向已经用位置来指明了。 其中newDirection
* 必须和原来的direction不是相反方向,所以相反方向的值用了同样的奇偶性。在测试
* 的时候使用了direction%2!=newDirection%2 进行判断。
* moveOn(),用来更新蛇的位置,对于当前方向,把头部位置进行相应改变。如果越界,
* 结束;否则,检测是否遇到食物(加头部)或身体(结束);如果什么都没有,加上头部,
* 去掉尾部。由于用了LinkedList数据结构,省去了相当多的麻烦。
*************************************************************************/
//----------------------------------------------------------------------
//Node:结点类
//----------------------------------------------------------------------
class Node
{
int x;
int y;
Node(int x,int y)
{
this.x=x;
this.y=y;
}
}
//----------------------------------------------------------------------
//SnakeModel:贪吃蛇模型
//----------------------------------------------------------------------
class SnakeModel implements Runnable
{
GreedSnake gs;
boolean[][] matrix;// 界面数据保存在数组里
LinkedList nodeArray=new LinkedList();
Node food;
int maxX;//最大宽度
int maxY;//最大长度
int direction=2;//方向
boolean running=false;
int timeInterval=200;// 间隔时间(速度)
double speedChangeRate=0.75;// 速度改变程度
boolean paused=false;// 游戏状态
int score=0;
int countMove=0;
// UP和DOWN是偶数,RIGHT和LEFT是奇数
public static final int UP=2;
public static final int DOWN=4;
public static final int LEFT=1;
public static final int RIGHT=3;
//----------------------------------------------------------------------
//GreedModel():初始化界面
//----------------------------------------------------------------------
public SnakeModel(GreedSnake gs,int maxX,int maxY)
{
this.gs=gs;
this.maxX=maxX;
this.maxY=maxY;
matrix=new boolean[maxX][];
for(int i=0;imaxX;++i)
{
matrix[i]=new boolean[maxY];
Arrays.fill(matrix[i],false);// 没有蛇和食物的地区置false
}
//初始化贪吃蛇
int initArrayLength=maxX20 ? 10 : maxX/2;
for(int i=0;iinitArrayLength;++i)
{
int x=maxX/2+i;
int y=maxY/2;
nodeArray.addLast(new Node(x,y));
matrix[x][y]=true;// 蛇身处置true
}
food=createFood();
matrix[food.x][food.y]=true;// 食物处置true
}
//----------------------------------------------------------------------
//changeDirection():改变运动方向
//----------------------------------------------------------------------
public void changeDirection(int newDirection)
{
if(direction%2!=newDirection%2)// 避免冲突
{
direction=newDirection;
}
}
//----------------------------------------------------------------------
//moveOn():贪吃蛇运动函数
//----------------------------------------------------------------------
public boolean moveOn()
{
Node n=(Node)nodeArray.getFirst();
int x=n.x;
int y=n.y;
switch(direction)
{
case UP:
y--;
break;
case DOWN:
y++;
break;
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
}
if((0=xxmaxX)(0=yymaxY))
{
if(matrix[x][y])// 吃到食物或者撞到身体
{
if(x==food.xy==food.y)// 吃到食物
{
nodeArray.addFirst(food);// 在头部加上一结点
//计分规则与移动长度和速度有关
int scoreGet=(10000-200*countMove)/timeInterval;
score+=scoreGet0 ? scoreGet : 10;
countMove=0;
food=createFood();
matrix[food.x][food.y]=true;
return true;
}
else return false;// 撞到身体
}
else//什么都没有碰到
{
nodeArray.addFirst(new Node(x,y));// 加上头部
matrix[x][y]=true;
n=(Node)nodeArray.removeLast();// 去掉尾部
matrix[n.x][n.y]=false;
countMove++;
return true;
}
}
return false;//越界(撞到墙壁)
}
//----------------------------------------------------------------------
//run():贪吃蛇运动线程
//----------------------------------------------------------------------
public void run()
{
running=true;
while(running)
{
try
{
Thread.sleep(timeInterval);
}catch(Exception e)
{
break;
}
if(!paused)
{
if(moveOn())// 未结束
{
gs.repaint();
}
else//游戏结束
{
JOptionPane.showMessageDialog(null,"GAME OVER",
"Game Over",JOptionPane.INFORMATION_MESSAGE);
break;
}
}
}
running=false;
}
//----------------------------------------------------------------------
//createFood():生成食物及放置地点
//----------------------------------------------------------------------
private Node createFood()
{
int x=0;
int y=0;
do
{
Random r=new Random();
x=r.nextInt(maxX);
y=r.nextInt(maxY);
}while(matrix[x][y]);
return new Node(x,y);
}
//----------------------------------------------------------------------
//speedUp():加快蛇运动速度
//----------------------------------------------------------------------
public void speedUp()
{
timeInterval*=speedChangeRate;
}
//----------------------------------------------------------------------
//speedDown():放慢蛇运动速度
//----------------------------------------------------------------------
public void speedDown()
{
timeInterval/=speedChangeRate;
}
//----------------------------------------------------------------------
//changePauseState(): 改变游戏状态(暂停或继续)
//----------------------------------------------------------------------
public void changePauseState()
{
paused=!paused;
}
}
相关问答
Q1: windows小游戏-空当接龙,蜘蛛纸牌难度(and 编程实现)
空当接龙相比蜘蛛纸牌难(我的感觉)
两者编起来难度差别不是太大,蜘蛛纸牌编写难度大一些,因为其分三种情况(单色双色四色)。
实际上从两个游戏的大小就能看出来(Win7 - C:\Program Files\Microsoft Games):
空当接龙(freecell.exe):708KB
蜘蛛纸牌(SpiderSolitaire.exe):719KB
没啥太深奥的,就是计算用户操作代表的指令符不符合程序的某条规则(就是个布尔值),符合将会执行,不符合将会予以提示。最终当所有牌的代码符合完成游戏的条件代码,就提示游戏结束。总之就是注意它的游戏规则,实现起来不难就是有点繁琐
Q2: windows蜘蛛纸牌
控制面板-添加删除程序-添加/删除WINDOWS组建-双击附件和工具-游戏前打上钩子就可以了。
没有光盘只能从别的机器上复制了,不过更大的可能性是你只是把快捷方式删了,文件还在,下面告诉你各个游戏对应文件名吧
扫雷 %SystemRoot%\system32\winmine.exe
纸牌 %SystemRoot%\system32\sol.exe
蜘蛛纸牌 %SystemRoot%\system32\spider.exe
空当接龙 %SystemRoot%\system32\freecell.exe
红心大战 %SystemRoot%\system32\mshearts.exe
三维弹球 C:\Program Files\Windows NT\Pinball\PINBALL.EXE
Internet 翻转棋 C:\Program Files\MSN Gaming Zone\Windows\Rvsezm.exe
Internet 黑桃王 C:\Program Files\MSN Gaming Zone\Windows\shvlzm.exe
Internet 红心大战 C:\Program Files\MSN Gaming Zone\Windows\hrtzzm.exe
Internet 双陆棋 C:\Program Files\MSN Gaming Zone\Windows\bckgzm.exe
Internet 跳棋 C:\Program Files\MSN Gaming Zone\Windows\chkrzm.exe
2.Windows自带小游戏作弊法分类:我的日志1、空档接龙:游戏中按下“Ctrl+Shift+F10”,在弹出的窗口中选择“终止(A)”,然后双击任意一张牌即可获胜。
2、扫雷:任意在雷区点一下鼠标,使时钟开始计时。之后依次按下“xyzzy”这几个键,之后按下“Shift”键2秒钟。将鼠标移动到任意方块上,屏幕左上角的边缘处就会出现一个点,白色说明没有雷,黑色则说明这个方块下有雷。
3、纸牌:游戏中按下“Alt+Shift+2”即可立即胜利。
4、三维弹球:游戏开始后先不要发球,键入“rmax”直接进入下一关;键入“bmax”得到无限弹珠;键入“hidden
test”(中间有空格)可用鼠标拖拽弹珠。
Windows扫雷技巧(作弊方法)
打开扫雷,输入"xyzzy",然后按"右Shift+Enter"。这时候你把鼠标停留在扫雷的任何一个方快上。仔细屏幕最左上角就会有个亮点,亮点很小,只有一个象素。黑色表示该处是地雷,白色表示该处是空数字。
另外如果你玩的时候从一开始只标记地雷而不点出数字,时间会一直停留在0,(等到地雷全部被标出——然后狂点吧——记录就在眼前呵)
操作系统要求,win 2k/xp (在最新vista beta2中可用)
Windows 9x/me不可
Windows三维弹球(3D Pinball)秘笈和技巧
小技巧
赚更多分:
通过"重新上场航道"点亮顶部所有的三盏灯,攻击缓冲器会改变颜色(蓝绿黄红)从而获得更多的分。
轻轻地发射球,让它点亮右边发射轨道的三盏调度灯,你可以得到7万5千分。
让球通过超空间斜道来旋转旗帜。当它旋转的时候,开始新游戏。旗帜会继续旋转,而且你在新游戏开始时会获得一些分。
你可以启用 bmax
来获得无限球从而得到非常高的纪录。当你这样获得足够高的纪录的时候,按住"撞针"直到提示"TILT",这样你就丢了一个球。注释:在丢了一个球后你仍然可以使用
1max 来继续,如果这样当你要退出时就不需要倾斜桌子了。
移动重新上场灯:
摇动挡板可以移动顶上的重新上场灯。
高技能发射:
调度斜道有隐藏的高技能发射。把球发射到部分斜道而且让它落到斜道的第一盏黄色拱形灯,这样就会赚到丰厚的分数。开启高技能发射,点亮每盏灯的分值为:
第一盏:15,000
第二盏:30,000
第三盏:75,000
第四盏:30,000
第五盏:15,000
第六盏:7,500
只完成一个任务就升级:
在用科学任务完成军校生时,当任务灯闪烁的时候,尽可能快地让球漏下。如果你不想丢一个球,请确认有额外球或重玩球。当球回到撞针处时,你就会在下一等级而且所有任务灯都打开了。现在你只需要完成一个任务就升一级。确认你有一个加分球或重玩球来故计重施,否则很快就玩不走了。
作弊码
加分球
在游戏中输入 1max 注:在Windows 2000/XP上有效
无限球:
在游戏刚启动后输入 bmax 注:在Windows 2000/XP上有效
注:额外的球会在"黄色漩涡式星体"处出现。
启动引力井:
在游戏开始时输入 gmax 注:在Windows 2000/XP上有效
立即晋级:
游戏中输入 rmax 注:这样将得不到分
Windows纸牌技巧
1、同时按住 Ctrl+Alt+Shift,再翻牌,则每次只会翻一张牌。
2、把Windows子目录下的“Sol.INI”文件中的“后退=XX”这一行删去,则每次进入游戏时背面将随机变化。
Windows空当接龙技巧
1、开始游戏,同时按下Ctrl+Shift+F10,在出现的对话框中点击“终止”,然后随便移动一张牌,马上过关。
2、选局时输入“-1”或“-2”,你会有意外的发现。
Windows红心大战技巧
先在注册表中找到“HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\
CurrentVersion\Applels\Hearts”(如无此项,先到游戏中修改一下电脑的名字),新增字符串值“zb”,值为“42”。然后启动“红心大战”,开局后按Ctrl+Alt+Shift+F12,看全牌(联网时也有用)。
3.上机操作时学生玩游戏是很多信息技术课老师面临的一个难题,尤其是Windows自带的几个经典游戏经久耐玩,让学生乐此不疲。本学期我校新建了一个机房,预装了Windows
XP操作系统,笔者删除了其中所有自带游戏。但一些高年级学生上机后,通过“控制面板”中的“添加/删除Windows组件”把“游戏”又装了上去。那么有没有办法彻底封杀Windows XP自带游戏呢? 与Windows 98不同,Windows XP在“添加/删除Windows组件”中并没有列出所有的组件,一些组件如画图、写字板等都被隐藏了起来,不能任意删除和修改。那么,我们也可以将 “附件与工具”中的“游戏”组件隐藏起来,让学生无法任意安装。
首先在学生机上通过“添加/删除Windows组件”删除Windows自带游戏。
再选择一台学生机,打开Windows\inf文件夹,找到其中的Sysoc.inf文件,这个文件记录的就是“添加/删除Windows组件”中各组件的属性。用任意一款文本编辑软件(如记事本)打开它,找到其中[Components]第二段的第一行:“Games=ocgen.dll,OcEntry,games.inf,
7”,将其更改为“Games=ocgen.dll,OcEntry,games.inf,hide,7”(如图),使“游戏”组件具有Hide(隐藏)属性,保存文件。此时再打开“添加/删除Windows组件”,你会发现“附件与工具”中已经没有了“游戏”项,也就是说,学生没有办法再安装Windows自带游戏了。如果今后需要再安装游戏,将“hide”去掉恢复原句即可。
现在的学校机房一般都安装有电子教室软件,利用电子教室常用的“文件分发”功能,将已经编辑好的Sysoc.inf文件发送到其他学生机的Windows\inf文件夹中替代原文件,这样就可以在整个机房全面封杀Windows自带游戏。
通过修改Sysoc.inf文件中的相关语句,你还可以将“附件”中“备份”、“系统还原”、“磁盘压缩”等不宜学生操作的Windows组件全部卸载。
Q3: 高分求java纸牌游戏源代码
Araneid 蜘蛛纸牌游戏
详细参考工程主页:
源代码下载(或附件):
二进制下载:
运行时请先解压缩,然后执行 classes 目录下的 start.bat
Q4: java编程后为什么蜘蛛纸牌不显示纸牌
蜘蛛是陆地生态系统中最丰富的捕食性天敌,在维持农林生态系统稳定中的作用不容忽视。[1] 体长1~90毫米,身体分头胸部(前体)和腹部(后体)两部分,头胸部覆以背甲和胸板。头胸部有附肢两对,第一对为螯肢,有螯牙、螯牙尖端有毒腺开口;直腭亚目的螯肢前后活动,钳腭亚目者侧向运动及相向运动;第二对为须肢,在雌蛛和未成熟的雄蛛呈步足状,用以夹持食物及作感觉器官;但在雄性成蛛须肢末节膨大,变为传送精子的交接器。蜘蛛目分2个
隆头蛛科某种
亚目:①中纺亚目有1科,共20余种;②后纺亚目(约107科,近4万种)。
其中,后纺亚目又分A:原蛛下目(约有14科,1500余种);B:新蛛下目(约有93科,38000余种)。.
蜘蛛的生活方式可分为两大类。即游猎型和定居型。游猎型者,到处游猎、捕食、居无定所、完全不结网、不挖洞、不造巢的蜘蛛。有鳞毛蛛科,拟熊蛛科和大多数的狼蛛科等。定居型的:有的结网,有的挖穴,有的筑巢,作为固定住所。如壁钱、类石蛛等。蜘蛛似乎懂礼貌,凡营独立生活者,个体之间都保持一定间隔距离,互不侵犯。
与一般昆虫相比,蜘蛛是长寿命者,大多数蜘蛛完成一个生活史,一般为8个月至2年,雄性蛛是短命的,交尾后不久即死亡。其他如水蛛和狡蛛能活18个月,穴居狼蛛能活2年,巨蟹蛛能活2年以上,还有捕鸟蛛的寿命长达20~30年。
所有的蜘蛛生活,都利用丝,丝由丝腺细胞分泌,在腺腔中为粘稠的液体,经纺管导出后,遇到空气时很快凝结成丝状,丝的比重为1.28,强韧而富有弹性。
网穴蜘蛛,白天在网内,夜晚守在洞口,伺机猎食或外出觅食。雄蛛在土块下挖一浅坑,穴居狼蛛在地下挖一垂直的深洞,舞蛛在洞口还加编了活盖。这种活盖是由多个丝层构成的。庞蛛的洞深达1米,该蛛体小,毒性强,一旦咬伤穴兔后,四分钟即死亡。蜘蛛的天敌很多。蟾蜍、蛙、蜥蜴、蜈蚣、蜜蜂、鸟类都捕食蜘蛛,有的寄生蜂寄生于蜘蛛卵内,有的寄生蝇的幼虫在蜘蛛卵袋中发育,小头蚊虻昆虫几乎全部都是以幼虫的形式寄生到蜘蛛体内。蜘蛛常用多种方法来御敌,如排出毒液,隐匿,伪装,拟态,保护色,振动等等。当逃不掉时,而自己的附肢被敌害夹持时,干脆切断自己的附肢一走了之,反正自断的步足在蜕皮时还会再生
关于蜘蛛纸牌java程序代码和蜘蛛纸牌java程序代码是什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






