贪吃蛇程序:
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****);
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*****RMATION_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;
}
}
具体如下:
连连看的小源码
package Lianliankan;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class lianliankan implements ActionListener
{
JFrame mainFrame;//主面板
Container thisContainer;
JPanel centerPanel,southPanel,northPanel;//子面板
JButton diamondsButton[][]= new JButton[6][5];//游戏按钮数组
JButton exitButton,resetButton,newlyButton;//退出,重列,重新开始按钮
JLabel fractionLable=new JLabel("0");//分数标签
JButton firstButton,secondButton;//
分别记录两次62616964757a686964616fe59b9ee7ad9431333335326239被选中的按钮
int grid[][]= new int[8][7];//储存游戏按钮位置
static boolean pressInformation=false;//判断是否有按钮被选中
int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV;//游戏按钮的位置坐标
int i,j,k,n;//消除方法控制
代码(code)是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。
对于字符和Unicode数据的位模式的定义,此模式代表特定字母、数字或符号(例如 0x20代表一个空格,而 0x74代表字符“t”)。一些数据类型每个字符使用一个字节;每个字节可以具有 256个不同的位模式中的一个模式。
在计算机中,字符由不同的位模式(ON或 OFF)表示。每个字节有 8位,这 8位可以有 256种不同的 ON和 OFF组合模式。对于使用 1个字节存储每个字符的程序,通过给每个位模式指派字符可表示*多 256个不同的字符。2个字节有 16位,这 16位可以有 65,536种**的 ON和 OFF组合模式。使用 2个字节表示每个字符的程序可表示*多 65,536个字符。
单字节代码页是字符定义,这些字符映射到每个字节可能有的 256种位模式中的每一种。代码页定义大小写字符、数字、符号以及!、@、#、*等特殊字符的位模式。每种欧洲语言(如德语和西班牙语)都有各自的单字节代码页。
虽然用于表示 A到 Z拉丁字母表字符的位模式在所有的代码页中都相同,但用于表示重音字符(如"é"和"á")的位模式在不同的代码页中却不同。如果在运行不同代码页的计算机间**数据,必须将所有字符数据由发送计算机的代码页转换为接收计算机的代码页。如果源数据中的扩展字符在接收计算机的代码页中未定义,那么数据将丢失。
如果某个数据库为来自许多不同**的客户端提供服务,则很难为该数据库选择这样一种代码页,使其包括所有客户端计算机所需的全部扩展字符。而且,在代码页间不停地转换需要花费大量的处理时间。
介绍这个给你把...我空间还有很多..
importjava.***let.Applet;
importjava.***let.AudioClip;
importjava.awt.Dimension;
importjava.awt.Font;
importjava.awt.Toolkit;
importjavax.sound.sampled.AudioFileFormat;
importjavax.sound.sampled.AudioSystem;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjava.awt.Rectangle;
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;
}
}

