首页编程java编程java游戏编程100例?几个java编程的典型例子

java游戏编程100例?几个java编程的典型例子

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

其实java游戏编程100例的问题并不复杂,但是又很多的朋友都不太了解几个java编程的典型例子,因此呢,今天小编就来为大家分享java游戏编程100例的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

java游戏编程100例?几个java编程的典型例子

java编程 设计如下图所示的窗口,完成猜数小游戏的设计。

界面不是完全一致,但是可行。

package ex1;

import java.util.Scanner;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

java游戏编程100例?几个java编程的典型例子

class WindowButton extends JFrame implements ActionListener

{

private static final long serialVersionUID= 1L;

int number;

JTextField inputNumber;

JLabel feedBack;

java游戏编程100例?几个java编程的典型例子

JButton buttonGetNumber,buttonEnter;

WindowButton(String s)

{

super(s);

buttonGetNumber= new JButton("得到一个新的随机数");

feedBack= new JLabel("无反馈信息",JLabel.CENTER);

feedBack.setBackground(Color.red);

inputNumber= new JTextField("0",5);

buttonEnter= new JButton("确定");

buttonEnter.addActionListener(WindowButton.this);

//code 1:按钮buttonEnter增加ActionEvent事件监视器,监视器为当前窗口

buttonGetNumber.addActionListener(WindowButton.this);

//code 2:按钮buttonGetNumber增加ActionEvent事件监视器,监视器为当前窗口

Box boxH1= Box.createHorizontalBox();

boxH1.add(new JLabel("获取1-100之间的随机数:"));

boxH1.add(buttonGetNumber);

Box boxH2= Box.createHorizontalBox();

boxH2.add(new JLabel("输入您的猜测:"));

boxH2.add(inputNumber);

Box boxH3= Box.createHorizontalBox();

boxH3.add(new JLabel("单击确定按钮:"));

boxH3.add(buttonEnter);

Box boxH4= Box.createHorizontalBox();

boxH4.add(new JLabel("反馈信息:"));

boxH4.add(feedBack);

Box baseBox= Box.createVerticalBox();

baseBox.add(boxH1);

baseBox.add(boxH2);

baseBox.add(boxH3);

baseBox.add(boxH4);

Container con= getContentPane();

con.setLayout(new FlowLayout());

con.add(baseBox);

con.validate();

setBounds(230,225,400,200);

setVisible(true);

validate();

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()== buttonGetNumber)//code 3:判断事件是否是buttonGetNumber

number=(int)(Math.random()*100)+1;

else if(e.getSource()== buttonEnter)//code 4:判断事件是否是buttonEnter

{

int guess= 0;

try{

guess= Integer.parseInt(inputNumber.getText());

//code 5:返回inputNumber中的文本

if(guess== number)

{

feedBack.setText("猜对了~");

//code 6:feedBack设置提示文本:"猜对了"

}

else if(guess> number)

{

feedBack.setText("猜大了~");

inputNumber.setText(null);

}

else if(guess< number)

{

feedBack.setText("猜小了~");

inputNumber.setText(null);

}

}

catch(NumberFormatException event)

{

feedBack.setText("请输入数字字符");

//code 7:feedBack设置提示文本:"请输入数字字符"

}

}

}

}

public class GuessNumberGame{

public static void main(String[] args){

new WindowButton("猜数子小游戏");

}

}

java,在制作超级玛丽游戏遇到个问题,求大牛!!

做这个需要很多的资源还耐心,我找了个做过的作者,把他的心得贴给你,希望有用!

大家好。今天有空写了点东西,主要是我做“超级玛丽”的经过和经验总结,也许对初学者有用。这是我整理过的,不是编程顺序。

先说明编程语言,我是用QB做“超级玛丽”游戏,VB做的地图编辑器。

确定游戏规模,我的设定是:没有怪和金币,没有可以出入的水管,通关时没有动画。这样,程序的主要操作是显示前景、背景和玛丽,进行玩家和前景的碰撞检测。

资源:图像资源:我参考了一个C语言的“超级玛丽”,借用并修改了其中部分图像(在此向原作者表示感谢)。声音:无。

图像处理:图像分前景和背景,前景和背景都为十六个16*16像素的图像块;前景分三组,用来显示不同关卡,每组的前两个图像块为过关标志(旗杆和横放的水管)。我为了使程序简单,程序中不考虑不同前景,检测过关的程序对旗杆和水管也就不分别判断了,所以只好横向判断,这样“站”在水管上面时不算过关,必须横向走进水管才算过关,旗杆也是一样。图像是BMP格式,不是标准十六色,必须把它转换成QB能识别的格式,并设置调色板。我做了两个辅助程序,一个是VB程序,功能是读取颜色值和像素,写入两个文本文件,一个是颜色值,QB通过它来设置调色板,另一个是图像中转文件;第二个辅助程序是QB程序,它读取刚才的图像中转文件,以GET格式用binary方式分图像块写入“tp.xp”文件。这样做的好处是游戏程序可以用数组存储GET格式图像文件,显示时不用“

select case图像索引

case 1 put(x,y),p1%

case 2 put(x,y),p2%

……

”,可以“PUT(x,y), bj(0,图像索引值), PSET”一条语句搞定。

地图:地图文件是文本文件,每行长度是200个字节,高21行。上5行没用,因为玛丽可以跳得高过屏幕,为了在碰撞检测时少点罗嗦,所以加上这五行。然后12行是地图内容,大写字母是背景,小写字母是前景,字母的ascii值与图像索引顺序相同。最后是前景号(前景共三组)和游戏开始时玛丽的位置。确定了这些做地图编辑器就好办了,地图编辑器没什么好讲的。注意做地图时要注意游戏的乐趣和平衡性。

游戏程序:

输入要求能检测多个键同时按下,这一部分是我从咱们火客下的,要是没有它真做不了。

运动。模拟玛丽跳起和自由下落时费了点周折,我甚至想过用平方函数曲线(它不是叫做抛物线吗?),后来发现了一个更好的办法:重力因素。试试下面这个小程序,是不是个抛物线?

SCREEN 12

dim x,y,ty,zl as integer

zl=1'重力因素

y= 100'高度

ty= 20'跳起时加这条

FOR x= 100 TO 200 STEP 2

ty= ty- zl

y= y+ ty'游戏程序中如果没有发生碰撞则执行这一条

PSET(x, 480- y), 15

NEXT

它的好处是简单和真实。特点是任何时候都会因重力而下落。当人跳起时升高的高度会越来越小,到达顶点后下落,下落时落差越来越大(也就是越来越快),非常真实。从悬崖上掉下(非跳起的情况)时会自由下落。而如果人在实地上行走,则在碰撞检测时会检测到,不让他下落,游戏中看不出来这一点。当然了,这只是模拟。

卷屏。地图用数组存储,每个数组元素代表一个地图块,显示时只显示一部分(宽十九个地图块,高十二个地图块)。我设了两个变量,一个是要显示的地图部分的首地址;另一个是地图显示的位置。要平滑卷动地图就得细致点,移动距离越小看起来越平滑。

看一下程序:

IF x- pyl* 16> 120 AND pyl< 181 THEN wyl= wyl+ 4

IF wyl>= 16 THEN wyl= 0: pyl= pyl+ 1

X是人在地图上的横坐标,pyl是显示的地图的首地址,x- pyl* 16是人在显示器上的横坐标,120大约在屏幕中线,wyl是显示的首块地图的显示位置,叫它位移量吧,取值为0、4、8、12。

第一条:当人向右行走超过中线且没到终点时,位移量加四,每块地图显示时向左移动四像素。

第二条:当移动十六像素时显示的地图范围向右移动一格,位移量置零。

这样循环就实现了地图平滑卷动。

碰撞检测。这一部分很简单,依次检查人所占的四格地图是否为空,如果人已进入前景,就把他拉回来。

人物图像的显示:

IF dz< 3 THEN dz= dz+ 1 ELSE dz= 0'正常行走时,三幅行走图交替显示。

IF GameKey(75)= 0 AND 0= GameKey(77) THEN dz= 0'没有行走时,站立资势。

IF d= 0 THEN dz= 5'跳跃时,显示跳的图片。

它们的顺序也是优先级。

再加上方向,就很自然了。方向是在检测输入时设置的。

刚才说了“tp.xp”文件和显示地图块,再用源码解释一下。我并不懂GET图像格式,不过我的辅助程序是这样写文件的:

OPEN"tp.xp" FOR BINARY AS#2

for………

f= 1

GET(,)-(,), a

FOR j= 0 TO 130

PUT#2, f, a(j)

f= f+ 2

NEXT

……NEXT

CLOSE

游戏初始化时读文件:

f= 1

OPEN"tp.xp" FOR BINARY AS#2

FOR i= 0 TO 15

FOR j= 0 TO 130

GET#2, f, bj(j, i)

f= f+ 2

NEXT

NEXT

CLOSE#2

显示时:

PUT(,), bj(0,图像索引值), PSET

一条就行了。

嗯,主要的就这些了。

这些只是我在编程时摸索得来的,可能与正规游戏开发有出入。如果有不当或错误的地方,欢迎批评指正.

谢谢。

高分悬赏Java程序,急!!!

import java.awt.*;

import java.awt.event.*;

//俄罗斯方块类

public class ERS_Block extends Frame{

public static boolean isPlay=false;

public static int level=1,score=0;

public static TextField scoreField,levelField;

public static MyTimer timer;

GameCanvas gameScr;

public static void main(String[] argus){

ERS_Block ers= new ERS_Block("俄罗斯方块游戏 V1.0 Author:Vincent");

WindowListener win_listener= new WinListener();

ers.addWindowListener(win_listener);

}

//俄罗斯方块类的构造方法

ERS_Block(String title){

super(title);

setSize(600,480);

setLayout(new GridLayout(1,2));

gameScr= new GameCanvas();

gameScr.addKeyListener(gameScr);

timer= new MyTimer(gameScr);

timer.setDaemon(true);

timer.start();

timer.suspend();

add(gameScr);

Panel rightScr= new Panel();

rightScr.setLayout(new GridLayout(2,1,0,30));

rightScr.setSize(120,500);

add(rightScr);

//右边信息窗体的布局

MyPanel infoScr= new MyPanel();

infoScr.setLayout(new GridLayout(4,1,0,5));

infoScr.setSize(120,300);

rightScr.add(infoScr);

//定义标签和初始值

Label scorep= new Label("分数:",Label.LEFT);

Label levelp= new Label("级数:",Label.LEFT);

Label namep= new Label("姓名:张三",Label.LEFT);

Label nump= new Label("学号:110821332",Label.LEFT);

scoreField= new TextField(8);

levelField= new TextField(8);

scoreField.setEditable(false);

levelField.setEditable(false);

infoScr.add(namep);

infoScr.add(nump);

infoScr.add(scorep);

infoScr.add(scoreField);

infoScr.add(levelp);

infoScr.add(levelField);

scorep.setSize(new Dimension(20,60));

scoreField.setSize(new Dimension(20,60));

levelp.setSize(new Dimension(20,60));

levelField.setSize(new Dimension(20,60));

scoreField.setText("0");

levelField.setText("1");

//右边控制按钮窗体的布局

MyPanel controlScr= new MyPanel();

controlScr.setLayout(new GridLayout(5,1,0,5));

rightScr.add(controlScr);

//定义按钮play

Button play_b= new Button("开始游戏");

play_b.setSize(new Dimension(50,200));

play_b.addActionListener(new Command(Command.button_play,gameScr));

//定义按钮Level UP

Button level_up_b= new Button("提高级数");

level_up_b.setSize(new Dimension(50,200));

level_up_b.addActionListener(new Command(Command.button_levelup,gameScr));

//定义按钮Level Down

Button level_down_b=new Button("降低级数");

level_down_b.setSize(new Dimension(50,200));

level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr));

//定义按钮Level Pause

Button pause_b=new Button("游戏暂停");

pause_b.setSize(new Dimension(50,200));

pause_b.addActionListener(new Command(Command.button_pause,gameScr));

//定义按钮Quit

Button quit_b= new Button("退出游戏");

quit_b.setSize(new Dimension(50,200));

quit_b.addActionListener(new Command(Command.button_quit,gameScr));

controlScr.add(play_b);

controlScr.add(level_up_b);

controlScr.add(level_down_b);

controlScr.add(pause_b);

controlScr.add(quit_b);

setVisible(true);

gameScr.requestFocus();

}

}

//重写MyPanel类,使Panel的四周留空间

class MyPanel extends Panel{

public Insets getInsets(){

return new Insets(30,50,30,50);

}

}

//游戏画布类

class GameCanvas extends Canvas implements KeyListener{

final int unitSize= 30;//小方块边长

int rowNum;//正方格的行数

int columnNum;//正方格的列数

int maxAllowRowNum;//允许有多少行未削

int blockInitRow;//新出现块的起始行坐标

int blockInitCol;//新出现块的起始列坐标

int [][] scrArr;//屏幕数组

Block b;//对方快的引用

//画布类的构造方法

GameCanvas(){

rowNum= 15;

columnNum= 10;

maxAllowRowNum= rowNum- 2;

b= new Block(this);

blockInitRow= rowNum- 1;

blockInitCol= columnNum/2- 2;

scrArr= new int [32][32];

}

//初始化屏幕,并将屏幕数组清零的方法

void initScr(){

for(int i=0;i<rowNum;i++)

for(int j=0; j<columnNum;j++)

scrArr[i][j]=0;

b.reset();

repaint();

}

//重新刷新画布方法

public void paint(Graphics g){

for(int i= 0; i< rowNum; i++)

for(int j= 0; j< columnNum; j++)

drawUnit(i,j,scrArr[i][j]);

}

//画方块的方法

public void drawUnit(int row,int col,int type){

scrArr[row][col]= type;

Graphics g= getGraphics();

switch(type){//表示画方快的方法

case 0: g.setColor(Color.black);break;//以背景为颜色画

case 1: g.setColor(Color.blue);break;//画正在下落的方块

case 2: g.setColor(Color.magenta);break;//画已经落下的方法

}

g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true);

g.dispose();

}

public Block getBlock(){

return b;//返回block实例的引用

}

//返回屏幕数组中(row,col)位置的属性值

public int getScrArrXY(int row,int col){

if(row< 0|| row>= rowNum|| col< 0|| col>= columnNum)

return(-1);

else

return(scrArr[row][col]);

}

//返回新块的初始行坐标方法

public int getInitRow(){

return(blockInitRow);//返回新块的初始行坐标

}

//返回新块的初始列坐标方法

public int getInitCol(){

return(blockInitCol);//返回新块的初始列坐标

}

//满行删除方法

void deleteFullLine(){

int full_line_num= 0;

int k= 0;

for(int i=0;i<rowNum;i++){

boolean isfull= true;

L1:for(int j=0;j<columnNum;j++)

if(scrArr[i][j]== 0){

k++;

isfull= false;

break L1;

}

if(isfull) full_line_num++;

if(k!=0&& k-1!=i&&!isfull)

for(int j= 0; j< columnNum; j++){

if(scrArr[i][j]== 0)

drawUnit(k-1,j,0);

else

drawUnit(k-1,j,2);

scrArr[k-1][j]= scrArr[i][j];

}

}

for(int i= k-1;i< rowNum; i++){

for(int j= 0; j< columnNum; j++){

drawUnit(i,j,0);

scrArr[i][j]=0;

}

}

ERS_Block.score+= full_line_num;

ERS_Block.scoreField.setText(""+ERS_Block.score);

}

//判断游戏是否结束方法

boolean isGameEnd(){

for(int col= 0; col<columnNum; col++){

if(scrArr[maxAllowRowNum][col]!=0)

return true;

}

return false;

}

public void keyTyped(KeyEvent e){

}

public void keyReleased(KeyEvent e){

}

//处理键盘输入的方法

public void keyPressed(KeyEvent e){

if(!ERS_Block.isPlay)

return;

switch(e.getKeyCode()){

case KeyEvent.VK_DOWN:b.fallDown();break;

case KeyEvent.VK_LEFT:b.leftMove();break;

case KeyEvent.VK_RIGHT:b.rightMove();break;

case KeyEvent.VK_SPACE:b.leftTurn();break;

}

}

}

//处理控制类

class Command implements ActionListener{

static final int button_play= 1;//给按钮分配编号

static final int button_levelup= 2;

static final int button_leveldown= 3;

static final int button_quit= 4;

static final int button_pause= 5;

static boolean pause_resume= true;

int curButton;//当前按钮

GameCanvas scr;

//控制按钮类的构造方法

Command(int button,GameCanvas scr){

curButton= button;

this.scr=scr;

}

//按钮执行方法

public void actionPerformed(ActionEvent e){

switch(curButton){

case button_play:if(!ERS_Block.isPlay){

scr.initScr();

ERS_Block.isPlay= true;

ERS_Block.score= 0;

ERS_Block.scoreField.setText("0");

ERS_Block.timer.resume();

}

scr.requestFocus();

break;

case button_levelup:if(ERS_Block.level< 10){

ERS_Block.level++;

ERS_Block.levelField.setText(""+ERS_Block.level);

ERS_Block.score= 0;

ERS_Block.scoreField.setText(""+ERS_Block.score);

}

scr.requestFocus();

break;

case button_leveldown:if(ERS_Block.level> 1){

ERS_Block.level--;

ERS_Block.levelField.setText(""+ERS_Block.level);

ERS_Block.score= 0;

ERS_Block.scoreField.setText(""+ERS_Block.score);

}

scr.requestFocus();

break;

case button_pause:if(pause_resume){

ERS_Block.timer.suspend();

pause_resume= false;

}else{

ERS_Block.timer.resume();

pause_resume= true;

}

scr.requestFocus();

break;

case button_quit:System.exit(0);

}

}

}

//方块类

class Block{

static int[][] pattern={

{0x0f00,0x4444,0x0f00,0x4444},//用十六进至表示,本行表示长条四种状态

{0x04e0,0x0464,0x00e4,0x04c4},

{0x4620,0x6c00,0x4620,0x6c00},

{0x2640,0xc600,0x2640,0xc600},

{0x6220,0x1700,0x2230,0x0740},

{0x6440,0x0e20,0x44c0,0x8e00},

{0x0660,0x0660,0x0660,0x0660}

};

int blockType;//块的模式号(0-6)

int turnState;//块的翻转状态(0-3)

int blockState;//快的下落状态

int row,col;//块在画布上的坐标

GameCanvas scr;

//块类的构造方法

Block(GameCanvas scr){

this.scr= scr;

blockType=(int)(Math.random()* 1000)%7;

turnState=(int)(Math.random()* 1000)%4;

blockState= 1;

row= scr.getInitRow();

col= scr.getInitCol();

}

//重新初始化块,并显示新块

public void reset(){

blockType=(int)(Math.random()* 1000)%7;

turnState=(int)(Math.random()* 1000)%4;

blockState= 1;

row= scr.getInitRow();

col= scr.getInitCol();

dispBlock(1);

}

//实现“块”翻转的方法

public void leftTurn(){

if(assertValid(blockType,(turnState+ 1)%4,row,col)){

dispBlock(0);

turnState=(turnState+ 1)%4;

dispBlock(1);

}

}

//实现“块”的左移的方法

public void leftMove(){

if(assertValid(blockType,turnState,row,col-1)){

dispBlock(0);

col--;

dispBlock(1);

}

}

//实现块的右移

public void rightMove(){

if(assertValid(blockType,turnState,row,col+1)){

dispBlock(0);

col++;

dispBlock(1);

}

}

//实现块落下的操作的方法

public boolean fallDown(){

if(blockState== 2)

return(false);

if(assertValid(blockType,turnState,row-1,col)){

dispBlock(0);

row--;

dispBlock(1);

return(true);

}else{

blockState= 2;

dispBlock(2);

return(false);

}

}

//判断是否正确的方法

boolean assertValid(int t,int s,int row,int col){

int k= 0x8000;

for(int i= 0; i< 4; i++){

for(int j= 0; j< 4; j++){

if((int)(pattern[t][s]&k)!= 0){

int temp= scr.getScrArrXY(row-i,col+j);

if(temp<0||temp==2)

return false;

}

k= k>> 1;

}

}

return true;

}

//同步显示的方法

public synchronized void dispBlock(int s){

int k= 0x8000;

for(int i= 0; i< 4; i++){

for(int j= 0; j< 4; j++){

if(((int)pattern[blockType][turnState]&k)!= 0){

scr.drawUnit(row-i,col+j,s);

}

k=k>>1;

}

}

}

}

//定时线程

class MyTimer extends Thread{

GameCanvas scr;

public MyTimer(GameCanvas scr){

this.scr= scr;

}

public void run(){

while(true){

try{

sleep((10-ERS_Block.level+ 1)*100);

}

catch(InterruptedException e){}

if(!scr.getBlock().fallDown()){

scr.deleteFullLine();

if(scr.isGameEnd()){

ERS_Block.isPlay= false;

suspend();

}else

scr.getBlock().reset();

}

}

}

}

class WinListener extends WindowAdapter{

public void windowClosing(WindowEvent l){

System.exit(0);

}

}

关于java游戏编程100例和几个java编程的典型例子的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

java面试基础知识?面试基础知识拉格纳罗斯的火焰节(奈法利安和拉格纳罗斯)