自己编写的一个JAVA贪吃蛇源代码和一个价值500万的算法
首先来考虑一个可能价值500万的方法。
先描述下算法的思想:
现在有一年中开双色球的数据,写出一个算法的思想,就是分析下一期出的数的概率最大的。
- 数据格式:前六位选号:1–33
- 后一位选号:1–16
- 总共一次选七位数
{依据思想: 一:根据一年中出现的次数,得出出现次数最多和最少的, 二:在最近几次中出现频率最密的走势更高,下次出现的概率更高, 还有很多的更科学的算法思想,我一时想不起来,请大家有想法的可以在这里发表,本人会散分的……………. }
import java.awt.*;
import java.awt.event.*;
class test2 extends Thread implements KeyListener /* 用线程控制速度,然后是监听键盘 */
{
Frame f = new Frame(); /* 定义一个窗口 */
Panel p1 = new Panel(); /* 定义两个面板,一个用来添加记分,记难度等级 */
Panel p2 = new Panel(); /* 这个用来添加按钮,蛇的每一节其实都是按钮 */
Label l0 = new Label( "难度:" ); /* 定义四个标签 */
Label l1 = new Label( "1" ); /* 难度等级开始时默认是一级 */
Label l2 = new Label( "分数:" );
Label l3 = new Label( "0" ); /* 分数开始时是0 */
String flag = "right"; /* 初始化的方向是向右 */
Button b[][] = new Button[30][30]; /* 定义30×30个按钮,准备添加到P2上 */
Button c[] = new Button[90000]; /* 记录蛇身的数组 */
int t1 = 15; int t2 = 8; /* 第一次运行时所在行为15,初始化蛇时头所在的列为8。 */
int x = 0; /* 定义贪食蛇长 */
int y = 0; /* 定义尾巴变量 */
int m, n; /* 转弯时用于参考蛇头位置 */
int total; /* 总分 */
int speed = 300; /* 速度 */
public void run()
{
f.setTitle( "贪食蛇" );
f.setBounds( 300, 100, 400, 400 );
f.setLayout( new BorderLayout() );
p1.setLayout( new FlowLayout() );
p1.setBackground( Color.getHSBColor( 50, 50, 50 ) );
p1.add( l0 );
p1.add( l1 );
p1.add( l2 );
p1.add( l3 );
f.add( p1, BorderLayout.NORTH );
p2.setLayout( new GridLayout( 30, 30 ) );
f.add( p2, BorderLayout.CENTER );
f.addWindowListener( new WindowAdapter() /* 添加关闭监听 */
{
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
} );
f.addKeyListener( this );
for ( int i = 0; i <= 29; i++ ) /* 定义30×30个面板 */
for ( int j = 0; j <= 29; j++ )
{
b[i][j] = new Button();
p2.add( b[i][j] );
b[i][j].setVisible( false ); /* 首先隐藏所有按钮 */
}
f.setVisible( true );
for ( int i = 0; i <= t2; i++ ) /* 初始化蛇 */
{
b[t1][i].setVisible( true );
b[t1][i].setBackground( Color.gray ); /* 可见部分就是蛇身 */
c[x] = b[t1][i]; /* 因为初始化是向右运动,所以最后一个按钮为蛇头 */
x++; /* x是用来记录蛇尾数组的,蛇移动时,蛇头增加一个,同时蛇尾减少一个 */
}
food(); /* 预先产生一个食物 */
while ( true ) /* 死循环 */
{
turn( flag );
}
} /* end run */
void turn( String s )
{
if ( s.equals( "right" ) )
for ( int i = t2 + 1; i <= 29; i++ )
{
if ( flag.equals( "up" ) ) /* 如果方向改变则跳出循环 */
return;
if ( flag.equals( "down" ) ) /* 此时方向向右,只可向下或者向上改变 */
return;
if ( b[t1][i].getBackground() == Color.blue ) /* 如果前面是食物 */
{
b[t1][i].setBackground( Color.gray );
c[x] = b[t1][i]; /* 如果遇到吃的就讲其设为蛇头就行,不用删尾 */
x++; /* 从而达到加长蛇身的目的 */
t2 = i;
total++;
if ( total == 5 )
{
l1.setText( "2" );
speed = 200;
}
if ( total == 10 )
{
l1.setText( "3" );
speed = 100;
}
if ( total == 15 )
{
l1.setText( "风速" );
speed = 50;
}
if ( total == 20 )
{
l1.setText( "疯了" );
speed = 25;
}
l3.setText( String.valueOf( total ) );
food(); /* 吃掉食物以后又重新产生一个食物 */
}else {
b[t1][i].setVisible( true );
b[t1][i].setBackground( Color.gray );
t2 = i;
c[x] = b[t1][i];
x++;
c[y].setBackground( Color.red );
c[y].setVisible( false );
y++;
}
try{
Thread.sleep( speed );
}catch ( InterruptedException e ) {}
}
if ( s.equals( "up" ) )
for ( m = t1 - 1; m >= 0; m-- )
{
if ( flag.equals( "left" ) ) /* 如果方向改变则跳出循环 */
return;
if ( flag.equals( "right" ) ) /* 此时方向上,只可向左右改变方向 */
return;
if ( b[m][t2].getBackground() == Color.blue )
{
b[m][t2].setBackground( Color.gray );
c[x] = b[m][t2]; /* 如果遇到吃的就讲其设为蛇头就行,不用删尾 */
x++;
total++;
if ( total == 5 )
{
l1.setText( "2" );
speed = 200;
}
if ( total == 10 )
{
l1.setText( "3" );
speed = 100;
}
if ( total == 15 )
{
l1.setText( "风速" );
speed = 50;
}
if ( total == 20 )
{
l1.setText( "疯了" );
speed = 25;
}
l3.setText( String.valueOf( total ) );
food(); /* 从而达到加长蛇身的目的; */
}else {
b[m][t2].setVisible( true );
b[m][t2].setBackground( Color.gray );
t1 = m;
c[x] = b[m][t2];
x++;
c[y].setVisible( false );
c[y].setBackground( Color.red );
y++;
}
try
{ Thread.sleep( speed ); }catch ( InterruptedException e ) {}
}
if ( s.equals( "down" ) )
for ( m = t1 + 1; m <= 29; m++ )
{
if ( flag.equals( "left" ) ) /* 如果方向改变则跳出循环 */
return;
if ( flag.equals( "right" ) ) /* 此时方向上,只可向左右改变方向 */
return;
if ( b[m][t2].getBackground() == Color.blue )
{
b[m][t2].setBackground( Color.gray );
c[x] = b[m][t2]; /* 如果遇到吃的就讲其设为蛇头就行,不用删尾 */
x++;
total++;
if ( total == 5 )
{
l1.setText( "2" );
speed = 200;
}
if ( total == 10 )
{
l1.setText( "3" );
speed = 100;
}
if ( total == 15 )
{
l1.setText( "风速" );
speed = 50;
}
if ( total == 20 )
{
l1.setText( "疯了" );
speed = 25;
}
l3.setText( String.valueOf( total ) ); /* 从而达到加长蛇身的目的 */
food();
}else {
b[m][t2].setVisible( true );
b[m][t2].setBackground( Color.gray );
t1 = m;
c[x] = b[m][t2];
x++;
c[y].setBackground( Color.red );
c[y].setVisible( false );
y++;
}
try
{ Thread.sleep( speed ); }catch ( InterruptedException e ) {}
}
if ( s.equals( "left" ) )
for ( n = t2 - 1; n >= 0; n-- )
{
if ( flag.equals( "up" ) ) /* 如果方向改变则跳出循环 */
return;
if ( flag.equals( "down" ) ) /* 此时方向上,只可向左右改变方向 */
return;
if ( b[t1][n].getBackground() == Color.blue )
{
b[t1][n].setBackground( Color.gray );
c[x] = b[t1][n]; /* 如果遇到吃的就讲其设为蛇头就行,不用删尾 */
x++; /* 从而达到加长蛇身的目的 */
t2 = n;
total++;
if ( total == 5 )
{
l1.setText( "2" );
speed = 200;
}
if ( total == 10 )
{
l1.setText( "3" );
speed = 100;
}
if ( total == 15 )
{
l1.setText( "风速" );
speed = 50;
}
if ( total == 20 )
{
l1.setText( "疯了" );
speed = 25;
}
l3.setText( String.valueOf( total ) );
food();
}else {
b[t1][n].setVisible( true );
b[t1][n].setBackground( Color.gray );
t2 = n;
c[x] = b[t1][n];
x++;
c[y].setBackground( Color.red );
c[y].setVisible( false );
y++;
}
try
{ Thread.sleep( speed ); }catch ( InterruptedException e ) {}
}
} /* end turn */
void food()
{
int i = (int) (Math.random() * 29);
int j = (int) (Math.random() * 29);
b[i][j].setVisible( true );
b[i][j].setBackground( Color.blue );
}
public void keyPressed( KeyEvent e )
{
if ( e.getKeyCode() == KeyEvent.VK_UP )
{
flag = "up";
}
if ( e.getKeyCode() == KeyEvent.VK_DOWN )
{
flag = "down";
}
if ( e.getKeyCode() == KeyEvent.VK_LEFT )
{
flag = "left";
}
if ( e.getKeyCode() == KeyEvent.VK_RIGHT )
{
flag = "right";
}
}
public void keyTyped( KeyEvent e )
{
}
public void keyReleased( KeyEvent e )
{
}
} /* end class */
class test
{
public static void main( String args[] )
{
test2 one = new test2();
one.start();
}
}