您的位置:首页 > 编程语言 > C#

C# greedy snake source code

2015-11-04 15:11 357 查看
using System;
using System.Windows.Forms;
using System.Drawing;
class Window : Form
{
Point[] a = new Point[1000];
int size=0;
Random r = new Random();
Point food=new Point();
int dir;
const int Up = 0;
const int Right = 1;
const int Left = 3;
const int Down = 2;
int [,]d={{0,-1},{1,0},{0,1},{-1,0}};
int xsize = 50, ysize = 30;
int per = 20;
public Window()
{
Text = "贪吃蛇--made by weidiao.neu";
a[0].X = 10;
a[0].Y = 10;
dir = 1;
size = 1;
food.X = 40;
food.Y = 25;
ClientSize = new Size(xsize * per, ysize * per);
Paint += draw;
KeyDown += keyDown;
Timer t = new Timer();
t.Interval = 400;
t.Tick += delegate
{
int x = a[0].X + d[dir,0];
int y = a[0].Y + d[dir,1];
if (x < 0 || y < 0 || x >= xsize || y >= ysize||dead(x,y))
{
t.Stop();
MessageBox.Show("你死了");
Application.Exit();
}
if (x == food.X && y == food.Y)
{
size++;
while (true)
{
int fx = r.Next(0, xsize - 1);
int fy = r.Next(0, ysize - 1);
int i;
for ( i = 0; i < size - 1; i++)
{
if (fx == a[i].X && fy == a[i].Y) break;
}
if (i == size - 1)
{
food.X = fx;
food.Y = fy;
break;
}
}
}
for (int i = size - 1; i > 0; i--)
{
a[i] = a[i - 1];
}
a[0].X = x;
a[0].Y = y;
Invalidate();
};
t.Start();
}
bool dead(int x, int y)
{
for (int i = 0; i < size; i++)
{
if (a[i].X == x && a[i].Y == y) return true;
}
return false;
}
void keyDown(object o, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up: if (dir == Down) return; else dir = Up; break;
case Keys.Down: if (dir == Up) return; else dir = Down; break;
case Keys.Left: if (dir == Right) return; else dir = Left; break;
case Keys.Right: if (dir == Left) return; else dir = Right; break;
}
}
void draw(object o, PaintEventArgs e)
{
var g = e.Graphics;
g.Clear(Color.Silver);
for (int i = 0; i < size; i++)
{
g.FillRectangle(new SolidBrush(Color.SeaGreen), a[i].X*per,per* a[i].Y, per,per);
}
g.FillEllipse(new SolidBrush(Color.Red), food.X*per, food.Y*per, per,per);
}
}
class Program
{
static void Main()
{
Application.Run(new Window());
}
}


demo to yanshuang.

java版

package haha;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

class Main extends JFrame {
public static void main(String[]args) {
new Main();
}
Point[] a = new Point[1000];
int size = 0;
Random r = new Random();
Point food = new Point();
int dir;
final int Up = 0;
final int Right = 1;
final int Left = 3;
final int Down = 2;
int[][] d = { { 0, -1 }, { 1, 0 }, { 0, 1 }, { -1, 0 } };
int xsize = 50, ysize = 30;
int per = 20;
Timer t;

public Main() {
setTitle("贪吃蛇--made by weidiao.neu");
a[0]=new Point(10, 10);
dir = 1;
size = 1;
food.x = 40;
food.y = 25;
setSize(xsize * per, ysize * per);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
t = new Timer();
t.schedule(new TimerTask() {

@Override
public void run() {
int x = a[0].x + d[dir][0];
int y = a[0].y + d[dir][1];
if (x < 0 || y < 0 || x >= xsize || y >= ysize || dead(x, y)) {
t.cancel();
JOptionPane.showConfirmDialog(Main.this, "你死了");
}
if (x == food.x && y == food.y) {
size++;
while (true) {
int fx = r.nextInt(xsize);
int fy = r.nextInt(ysize);
int i;
for (i = 0; i < size - 1; i++) {
if (fx == a[i].x && fy == a[i].y)
break;
}
if (i == size - 1) {
food.x = fx;
food.y = fy;
break;
}
}
}
for (int i = size - 1; i > 0; i--) {
a[i] = a[i - 1];
}
a[0].x = x;
a[0].y = y;
repaint();
}
}, 0, 400);
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
keyDown(e.getKeyCode());
}
});
}

boolean dead(int x, int y) {
for (int i = 0; i < size; i++) {
if (a[i].x == x && a[i].y == y)
return true;
}
return false;
}

void keyDown(int keyCode) {
switch (keyCode) {
case KeyEvent.VK_UP:
if (dir == Down)
return;
else
dir = Up;
break;
case KeyEvent.VK_DOWN:
if (dir == Up)
return;
else
dir = Down;
break;
case KeyEvent.VK_LEFT:
if (dir == Right)
return;
else
dir = Left;
break;
case KeyEvent.VK_RIGHT:
if (dir == Left)
return;
else
dir = Right;
break;
}
}

@Override
public void paint(Graphics g) {
g.setColor(Color.gray);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.green);
for (int i = 0; i < size; i++) {
g.fillRect(a[i].x * per, per * a[i].y, per, per);
}
g.setColor(Color.red);
g.fillOval(food.x * per, food.y * per, per, per);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: