用java能编写什么小游戏(用JAVA编一个小游戏或者其他程序)
大家好,关于用java能编写什么小游戏很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于用JAVA编一个小游戏或者其他程序的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
用JAVA编一个小游戏或者其他程序
贪吃蛇程序:
GreedSnake.java(也是程序入口):
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Iterator;
import java.util.LinkedList;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
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();
}
}
Node.java:
public class Node{
int x;
int y;
Node(int x, int y){
this.x= x;
this.y= y;
}
}
SnakeModel.java:
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Random;
import javax.swing.JOptionPane;
public 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; i< maxX;++i){
matrix[i]= new boolean[maxY];
Arrays.fill(matrix[i], false);//没有蛇和食物的地区置false
}
//初始化贪吃蛇
int initArrayLength= maxX> 20? 10: maxX/ 2;
for(int i= 0; i< initArrayLength;++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<= x&& x< maxX)&&(0<= y&& y< maxY)){
if(matrix[x][y])//吃到食物或者撞到身体
{
if(x== food.x&& y== food.y)//吃到食物
{
nodeArray.addFirst(food);//在头部加上一结点
//计分规则与移动长度和速度有关
int scoreGet=(10000- 200* countMove)/ timeInterval;
score+= scoreGet> 0? 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;
}
}
用JAVA编写一个小游戏
前天写的猜数字游戏,yongi控制猜测次数,有详细解析,用黑窗口可以直接运行,
我试验过了,没问题
import javax.swing.Icon;
import javax.swing.JOptionPane;
public class CaiShuZi4JOptionPane{
/**
*@param args
*/
public static void main(String[] args){
Icon icon= null;
boolean bl= false;
int put= 0;
int c=(int)(((Math.random())*100)+1);//获取一个1-100的随机数
System.out.println("你获取的随机数是:"+c);//打印你的随机数字
String str1=(String) JOptionPane.showInputDialog(null,"请输入你的猜测数字(1-100):\n","猜数字游戏",JOptionPane.PLAIN_MESSAGE,icon,null,"在这输入");//第一次输入你的猜测数字
if(str1==null){
JOptionPane.showMessageDialog(null,"你已经取消了本次游戏");//如果你点取消那么本次游戏结束
}else{
bl= num(str1);//判断是输入的是不是数字或者是整数
if(true==bl){//如果是数字的话进入与随机数比较的程序
System.out.println("你输入的数字是:"+str1);//打印你输入的数字
put= Integer.valueOf(str1);
for(int i= 4;i> 0;i--){//i是你可以猜测的次数
if(put==c){
JOptionPane.showMessageDialog(null,"恭喜你猜对了,正确答案是:"+c+"。");//如果你猜对了就直接结束循环
break;
}else if(put>c){//如果输大了就让你再次从新输入
str1=(String) JOptionPane.showInputDialog(null,"你的输入过大。你还有"+i+"次机会,请重新输入:\n","猜数字游戏",JOptionPane.PLAIN_MESSAGE,icon,null,"在这输入");
if(str1==null){
JOptionPane.showMessageDialog(null,"你已经取消了本次输入");
break;
}else{
bl=num(str1);
if(true==bl){
put= Integer.valueOf(str1);
}else{
JOptionPane.showMessageDialog(null,"你的输入不正确,请重新输入");
}
}
}else if(put<c){//如果你输小了也让你从新输入
str1=(String) JOptionPane.showInputDialog(null,"你的输入过小。你还有"+i+"次机会,请重新输入:\n","猜数字游戏",JOptionPane.PLAIN_MESSAGE,icon,null,"在这输入");
if(str1==null){
JOptionPane.showMessageDialog(null,"你已经取消了本次输入");
break;
}else{
bl=num(str1);
if(true==bl){
put= Integer.valueOf(str1);
}else{
JOptionPane.showMessageDialog(null,"你的输入不正确,请重新输入");
}
}
}
}
}else if(bl==false){//这个是你第一次如果填写的不是数字的话也会结束本次游戏
JOptionPane.showMessageDialog(null,"请您下次按要求填写。本次游戏结束");
}
if(true==bl&& c!=put){//如果你i次都没猜对,那么就直接告诉你这个数十什么
JOptionPane.showMessageDialog(null,"很遗憾你没能猜对,这个数字是:"+c+".");
}
}
}
public static boolean num(String value){//一个静态方法,判断你输入的是不是数字
try{
Integer.parseInt(value);
return true;
} catch(Exception e){
return false;
}
}
}
用java开发小游戏
我给你个华容道的游戏参照下吧。可以自己照着做下。多看例子想想就行了。
找个游戏做的不好,不要笑话啊。
import java.awt.*;
import javax.swing.JApplet.*;
import java.awt.event.*;
import javax.swing.*;
class People extends JButton implements FocusListener
{
Rectangle rect=null;
int left_x,left_y;//按钮左上角坐标.
int width,height;//按钮的宽和高.
String name;
int number;
public People(int number,String s,int x,int y,int w,int h,HuaRongRoad road)
{
super(s);
name=s;
this.number=number;
left_x=x;
left_y=y;
width=w;
height=h;
setBackground(Color.GREEN);
road.add(this);
addKeyListener(road);
setBounds(x,y,w,h);
addFocusListener(this);
rect=new Rectangle(x,y,w,h);
}
public void focusGained(FocusEvent e)
{
setBackground(Color.red);
}
public void focusLost(FocusEvent e)
{
setBackground(Color.GREEN);
}
}
public class HuaRongRoad extends JApplet implements KeyListener,ActionListener
{
People people[]=new People[10];
Rectangle left,right,above,below;//华容道的边界
JButton restart=new JButton("restart");
public void init()
{
getContentPane().setLayout(null);
getContentPane().add(restart);
restart.setBounds(5,5,80,25);
restart.addActionListener(this);
getContentPane().setBackground(Color.white);
people[0]=new People(0,"曹操",154,54,200,200,this);
people[1]=new People(1,"关羽",154,254,200,100,this);
people[2]=new People(2,"张飞",54,254,100,200,this);
people[3]=new People(3,"刘备",354,254,100,200,this);
people[4]=new People(4,"张辽",54,54,100,200,this);
people[5]=new People(5,"曹仁",354,54,100,200,this);
people[6]=new People(6,"兵",54,454,100,100,this);
people[7]=new People(7,"兵",354,454,100,100,this);
people[8]=new People(8,"兵",154,354,100,100,this);
people[9]=new People(9,"兵",254,354,100,100,this);
people[9].requestFocus();
people[0].setForeground(Color.white);
left=new Rectangle(49,49,5,510);
right=new Rectangle(454,49,5,510);
above=new Rectangle(49,49,410,5);
below=new Rectangle(49,554,410,5);
}
public void paint(Graphics g)
{//华容道的边界
super.paint(g);
g.setColor(Color.cyan);
g.fillRect(49,49,5,510);
g.fillRect(454,49,5,510);
g.fillRect(49,49,410,5);
g.fillRect(49,554,410,5);
//
g.drawString("单击,按方向箭头移动",100,20);
g.setColor(Color.red);
g.drawString("曹操到达该位置",110,300);
}
public void keyPressed(KeyEvent e)
{
People man=(People)e.getSource();
man.rect.setLocation(man.getBounds().x,man.getBounds().y);
if(e.getKeyCode()==KeyEvent.VK_DOWN)
{
man.left_y=man.left_y+100;//向下前进50个单位
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
//判断是否和其他人或边界重叠,出现就退回50个单位
for(int i=0;i<10;i++)
{
if((man.rect.intersects(people[i].rect))&&(man.number!=i))
{
man.left_y=man.left_y-100;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
if(man.rect.intersects(below))
{
man.left_y=man.left_y-100;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
if(e.getKeyCode()==KeyEvent.VK_UP)
{
man.left_y=man.left_y-100;//向上前进50个单位
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
//判断是否和其他人或边界重叠,出现就退回50个单位
for(int i=0;i<10;i++)
{
if((man.rect.intersects(people[i].rect))&&(man.number!=i))
{
man.left_y=man.left_y+100;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
if(man.rect.intersects(above))
{
man.left_y=man.left_y+100;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
if(e.getKeyCode()==KeyEvent.VK_LEFT)
{
man.left_x=man.left_x-100;//向左前进50个单位
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
//判断是否和其他人或边界重叠,出现就退回50个单位
for(int i=0;i<10;i++)
{
if((man.rect.intersects(people[i].rect))&&(man.number!=i))
{
man.left_x=man.left_x+100;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
if(man.rect.intersects(left))
{
man.left_x=man.left_x+100;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
man.left_x=man.left_x+100;//向右进50个单位
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
//判断是否和其他人或边界重叠,出现就退回50个单位
for(int i=0;i<10;i++)
{
if((man.rect.intersects(people[i].rect))&&(man.number!=i))
{
man.left_x=man.left_x-100;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
if(man.rect.intersects(right))
{
man.left_x=man.left_x-100;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public void actionPerformed(ActionEvent e)
{
getContentPane().removeAll();
this.init();
}
}
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!