首页编程java编程java游戏源码,java小游戏源代码大全

java游戏源码,java小游戏源代码大全

编程之家2026-06-03851次浏览

大家好,关于java游戏源码很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于java小游戏源代码大全的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

java游戏源码,java小游戏源代码大全

java小游戏源代码

介绍这个给你把...我空间还有很多..

importjava.applet.Applet;

importjava.applet.AudioClip;

importjava.awt.Dimension;

importjava.awt.Font;

java游戏源码,java小游戏源代码大全

importjava.awt.Toolkit;

importjavax.sound.sampled.AudioFileFormat;

importjavax.sound.sampled.AudioSystem;

importjavax.swing.JFrame;

importjavax.swing.JPanel;

importjava.awt.Rectangle;

java游戏源码,java小游戏源代码大全

importjavax.swing.BorderFactory;

importjavax.swing.JButton;

importjavax.swing.JOptionPane;

importjavax.swing.JSlider;

importjavax.swing.JLabel;

importjavax.swing.SwingUtilities;

importjavax.swing.UIManager;

importjavax.swing.event.ChangeEvent;

importjavax.swing.event.ChangeListener;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.KeyAdapter;

importjava.awt.event.KeyEvent;

importjava.io.File;

importjava.util.Vector;

publicclassFrameextendsJFrameimplementsRunnable{

JPanelcontentPane;

JPaneljPanel1=newJPanel();

JButtonjButton1=newJButton();

JSliderjSlider1=newJSlider();

JLabeljLabel1=newJLabel();

JButtonjButton2=newJButton();

JLabeljLabel2=newJLabel();

intcount=1,rapidity=80;//count当前进行的个数,rapidity游标的位置

intzhengque=0,cuowu=0;

intrush[]={10,20,30};//游戏每关的个数可以自由添加.列{10,20,30,40,50}

intrush_count=0;//记录关数

charlist[]={'A','B','C','D','E','F','G','H','I','J','K','L',

'M','N','O','P','Q','R','S','T','U','V','W','X','Y',

'Z','1','2','3','4','5','6','7','8','9'};//随机出现的数字可以自由添加

Vectornumber=newVector();

Stringpaiduan="true";

AudioClipMusci_anjian,Music_shibai,Music_chenggong;

publicFrame(){

try{

setDefaultCloseOperation(EXIT_ON_CLOSE);

//-----------------声音文件---------------------

Musci_anjian=Applet.newAudioClip(newFile("sounds//anjian.wav")

.toURL());

Music_shibai=Applet.newAudioClip(newFile("sounds//shibai.wav")

.toURL());

Music_chenggong=Applet.newAudioClip(newFile(

"sounds//chenggong.wav").toURL());

//---------------------------------------

jbInit();

}catch(Exceptionexception){

exception.printStackTrace();

}

}

/**

*Componentinitialization.

*

*@throwsjava.lang.Exception

*/

privatevoidjbInit()throwsException{

contentPane=(JPanel)getContentPane();

contentPane.setLayout(null);

setSize(newDimension(588,530));

setTitle("FrameTitle");

jPanel1.setBorder(BorderFactory.createEtchedBorder());

jPanel1.setBounds(newRectangle(4,4,573,419));

jPanel1.setLayout(null);

jButton1.setBounds(newRectangle(277,442,89,31));

jButton1.setText("开始");

jButton1.addActionListener(newFrame1_jButton1_actionAdapter(this));

jSlider1.setBounds(newRectangle(83,448,164,21));

jSlider1.setMaximum(100);

jSlider1.setMinimum(1);

jSlider1.setValue(50);

jLabel1.setText("速度");

jLabel1.setBounds(newRectangle(35,451,39,18));

jButton2.setBounds(newRectangle(408,442,89,31));

jButton2.setText("结束");

jButton2.addActionListener(newFrame1_jButton2_actionAdapter(this));

jLabel2.setText("第一关:100个");

jLabel2.setBounds(newRectangle(414,473,171,21));

contentPane.add(jPanel1);

contentPane.add(jButton2);

contentPane.add(jButton1);

contentPane.add(jSlider1);

contentPane.add(jLabel1);

contentPane.add(jLabel2);

this.addKeyListener(newMyListener());

jButton1.addKeyListener(newMyListener());

jSlider1.addKeyListener(newMyListener());

jSlider1.addChangeListener(newChangeListener(){

publicvoidstateChanged(ChangeEvente){

rapidity=jSlider1.getValue();

}

});

}

publicvoidrun(){

number.clear();

zhengque=0;

cuowu=0;

paiduan="true";

while(count<=rush[rush_count]){

try{

Threadt=newThread(newTthread());

t.start();

count+=1;

Thread.sleep(1000+(int)(Math.random()*2000));//生产下组停顿时间

//最快1快.最慢2秒

}catch(InterruptedExceptione){

e.printStackTrace();

}

}

while(true){//等待最后一个字符消失

if(number.size()==0){

break;

}

}

if(zhengque==0){//为了以后相除..如果全部正确或者错误就会出现错误.所以..

zhengque=1;

}

if(cuowu==0){

cuowu=1;

}

if(paiduan.equals("true")){//判断是否是自然结束

if(zhengque/cuowu>=2){

JOptionPane.showMessageDialog(null,"恭喜你过关了");

rush_count+=1;//自动加1关

if(rush_count<rush.length){

if(rapidity>10){//当速度大于10的时候在-5提加速度.怕速度太快

rapidity-=5;//速度自动减10毫秒

jSlider1.setValue(rapidity);//选择位置

}

Threadt=newThread(this);

t.start();

}else{

JOptionPane.showMessageDialog(null,"牛B...你通关了..");

rush_count=0;

count=0;

}

}else{

JOptionPane.showMessageDialog(null,"请再接再励");

rush_count=0;

count=0;

}

}else{

rush_count=0;

count=0;

}

}

publicvoidjButton1_actionPerformed(ActionEvente){

Threadt=newThread(this);

t.start();

}

publicvoidjButton2_actionPerformed(ActionEvente){

count=rush[rush_count]+1;

paiduan="flase";

}

classTthreadimplementsRunnable{

publicvoidrun(){

booleanfo=true;

intY=0,X=0;

JLabelshow=newJLabel();

show.setFont(newjava.awt.Font("宋体",Font.PLAIN,33));

jPanel1.add(show);

X=10+(int)(Math.random()*400);

Stringparameter=list[(int)(Math.random()*list.length)]+"";

Beanbean=newBean();

bean.setParameter(parameter);

bean.setShow(show);

number.add(bean);

show.setText(parameter);

while(fo){

//---------------------数字下移--------------------

show.setBounds(newRectangle(X,Y+=2,33,33));

try{

Thread.sleep(rapidity);

}catch(InterruptedExceptione){

e.printStackTrace();

}

if(Y>=419){

fo=false;

for(inti=number.size()-1;i>=0;i--){

Beanbn=((Bean)number.get(i));

if(parameter.equalsIgnoreCase(bn.getParameter())){

cuowu+=1;

jLabel2.setText("正确:"+zhengque+"个,错误:"+cuowu

+"个");

number.removeElementAt(i);

Music_shibai.play();

break;

}

}

}

}

}

}

classMyListenerextendsKeyAdapter{

publicvoidkeyPressed(KeyEvente){

Stringuu=e.getKeyChar()+"";

for(inti=0;i<number.size();i++){

Beanbean=((Bean)number.get(i));

if(uu.equalsIgnoreCase(bean.getParameter())){

zhengque+=1;

number.removeElementAt(i);

bean.getShow().setVisible(false);

jLabel2.setText("正确:"+zhengque+"个,错误:"+cuowu+"个");

Music_chenggong.play();

break;

}

}

Musci_anjian.play();

}

}

publicstaticvoidmain(String[]args){

try{

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

}catch(Exceptionexception){

exception.printStackTrace();

}

Frameframe=newFrame();

DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();

DimensionframeSize=frame.getSize();

if(frameSize.height>screenSize.height){

frameSize.height=screenSize.height;

}

if(frameSize.width>screenSize.width){

frameSize.width=screenSize.width;

}

frame.setLocation((screenSize.width-frameSize.width)/2,

(screenSize.height-frameSize.height)/2);

frame.setVisible(true);

}

}

classFrame1_jButton2_actionAdapterimplementsActionListener{

privateFrameadaptee;

Frame1_jButton2_actionAdapter(Frameadaptee){

this.adaptee=adaptee;

}

publicvoidactionPerformed(ActionEvente){

adaptee.jButton2_actionPerformed(e);

}

}

classFrame1_jButton1_actionAdapterimplementsActionListener{

privateFrameadaptee;

Frame1_jButton1_actionAdapter(Frameadaptee){

this.adaptee=adaptee;

}

publicvoidactionPerformed(ActionEvente){

adaptee.jButton1_actionPerformed(e);

}

}

classBean{

Stringparameter=null;

JLabelshow=null;

publicJLabelgetShow(){

returnshow;

}

publicvoidsetShow(JLabelshow){

this.show=show;

}

publicStringgetParameter(){

returnparameter;

}

publicvoidsetParameter(Stringparameter){

this.parameter=parameter;

}

}

谁有java游戏源码,给我发过来‘

注意:源代码仅供个人作学习研究时的参考,不得在程序制作中直接抄录。

源代码一共两个文件:Mine.java,MGame.java,另外还有一些图片。

在JBuilder下建立一个新的工程,将两个源文件复制到工程目录下的src\mine目录中,将所有图片复制到src\images目录中就可以了。

要点分析

数据结构

首先要说明一下用来存放地雷信息的数组grid。

grid是一个二维数组,第一位对应表格的行,第二位对应表格的列,比如grid[y][x]表示第y行第x列。每个字节的含义分三段:0-9表示已经挖开;10-19表示仍然埋藏;20-29表示做了标记。每段中:0-8表示周围的地雷数量;9表示是地雷。

newGame()函数

这是用于开始一个新游戏的。

由于每次地雷的埋放地是随机的,应次开始新游戏之前先要生成新的地雷信息。

第一步是初始化grid,将所有内容都置成10,因为一开始所有格子都是埋藏的。

for(i=0;i<Height; i++)

{

for(j=0; j<Width; j++)

grid[j]= 10;

}

第二步是随机产生地雷。当然了,已经产生过地雷的地方要避开。

for(i=0; i<MINECOUNT; i++)

{

while(true)

{

x= Math.abs(rand.nextInt())% Width;

y= Math.abs(rand.nextInt())% Height;

if(grid[y][x]!= 19)

{

grid[y][x]= 19;

break;

}

}

}

最后就是无雷处计算周围的雷数了。怎么计算?一个一个加就是了。

挖雷与做标记

在看一下按键响应函数keyPressed(int kcode),按1键是挖开动作。

前半部分表示如果当前焦点在一个埋藏格(值介于10到19之间),那么将其值减10,表示现在挖开。当然如果地下不是雷而且周围没有雷(值等于0)那么需要自动展开,这里调用了Expand(),(selx,sely)是当前焦点的表格坐标。

后半部分表示如果当前焦点在一个已经挖开的格子上(值小于10),那么就调用SafeExp()来自动挖开周围未挖的格子。

按3键是做标记动作。如果当前格是埋藏格,就做上标记(值加10);如果当前格已经做了标记,那么就去掉标记(值减10)。

自动展开

Expand()是一个嵌套函数,他的作用是将周围不含地雷的格子周围全部挖开,如果挖开的部分中也有周围不含地雷的格子,那么对那些格子也重复前面的操作,直到把相关的格子都挖开。挖的顺序是左上、上、右上、左、右、左下、下、右下,如果遇到一个周围不含地雷的格子(值为0)那么马上嵌套调用Expand()对那个格子进行处理。

SafeExp()是一个自动挖开周围未挖格子的函数。当然要实现这个功能是有条件的,就是周围做了标记的格子数量必须等于当前格所标的数字,也就是说玩家把周围所有的地雷都标记了(不管是否标错)。函数中第一个部分就是做以上条件的判断。

第二部分是把周围埋藏的格子挖开。但是由于玩家的错误可能标记了没有地雷的格子,而把有地雷的格子漏标了,所以先要检查一下没做标而有地雷的格子和做错标记的格子。如果没有这些错误,那么可以安全的翻开了,同时也要检查是否挖到周围不含雷的格子,有的话就要调用Expand()了。

SafeExp()的返回值表示是否引爆了地雷,就是标记错误,true表示是,false表示否。这主要用于判断这次游戏是否要结束。

类介绍

图像缓存 ExtendedImage

ExtendedImage是Siemens自己扩展的一个专用类,只在Siemens的Java中存在。

这个类主要是用做图像的缓存。大家不知道还有没有印象,以前在PC上编程的时候由于显示的速度比较慢,往往会开一片显示缓存,先把要现实的内容画到这片缓存中,全部画好后再一次性显示出来,ExtendedImage类就起到了这个作用。其实Java本身的Image类也可以实现类似的功能,但是显示速度好象不如人意,而且ExtendedImage更好用,所以我基本上都采用这个类。当然这对通用性是不利的。

ExtendImage的主要函数有:

void clear(byte color);

用给定的颜色填充整个图形区域。

void blitToScreen(int x, int y);

将缓存内容贴到显示屏上,(x,y)是屏幕左上角坐标。

Image getImage();

返回一个标准的Image类。可以通过ExtendImage.getImage().getGraphics()得到与其相关的Graphics对象,用来往ExtendImage上面画图。

基于Java语言的打地鼠小游戏的源代码

public void mouseClicked(MouseEvent e){

Object source=e.getSource();//获取事件源,即地鼠标签

if(source instanceof JLabel){//如果事件是标签组件

JLabel mouse=(JLabel)source;//强制转换为JLabel标签

mouse.setIcon(null);//取消标签图标

}

}

});

this.getContentPane().add(mouses[i]);//添加显示地鼠的标签到窗体

}

mouses[0].setLocation(253, 300);//设置每个标签的位置

mouses[1].setLocation(333, 250);

mouses[2].setLocation(388, 296);

mouses[3].setLocation(362, 364);

mouses[4].setLocation(189, 353);

mouses[5].setLocation(240, 409);

final JLabel backLabel=new JLabel();//创建显示背景的标签

backLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());

this.setBounds(100,100,img.getIconWidth(),img.getIconHeight());

backLabel.setIcon(img);//添加背景到标签

this.getContentPane().add(backLabel);//添加背景标签到窗体

}

/**

*线程的核心方法

*/

public void run(){

while(true){//使用无限循环

try{

Thread.sleep(3000);//使线程休眠3秒

int index=(int)(Math.random()*6);//生成随机的地鼠索引

if(mouses[index].getIcon()==null){//如果地鼠标签没有设置图片

mouses[index].setIcon(imgMouse);//为该标签添加地鼠图片

}

}catch(InterruptedException e){

e.printStackTrace();

}

}

}

}

java游戏源码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java小游戏源代码大全、java游戏源码的信息别忘了在本站进行查找哦。

滚动条快捷键(滚动条拖动过多的原因)ai智能志愿填报助手排名?十大高考志愿填报软件排名