using System;
 using System.Windows.Forms;
 using System.Drawing;
 class Window : Form
 {
     Point[] a = ];
     ;
     Random r = new Random();
     Point food=new Point();
     int dir;
     ;
     ;
     ;
     ;
     ,-},{,},{,},{-,}};
     , ysize = ;
     ;
     public Window()
     {
         Text = "贪吃蛇--made by weidiao.neu";
         a[].X = ;
         a[].Y = ;
         dir = ;
         size = ;
         food.X = ;
         food.Y = ;
         ClientSize = new Size(xsize * per, ysize * per);
         Paint += draw;
         KeyDown += keyDown;
         Timer t = new Timer();
         t.Interval = ;
         t.Tick += delegate
         {
             ].X + d[dir,];
             ].Y + d[dir,];
              || y <  || x >= xsize || y >= ysize||dead(x,y))
             {
                 t.Stop();
                 MessageBox.Show("你死了");
                 Application.Exit();
             }
             if (x == food.X && y == food.Y)
             {
                 size++;
                 while (true)
                 {
                     , xsize - );
                     , ysize - );
                     int i;
                     ; i < size - ; i++)
                     {
                         if (fx == a[i].X && fy == a[i].Y) break;
                     }
                     )
                     {
                         food.X = fx;
                         food.Y = fy;
                         break;
                     }
                 }
             }
             ; i > ; i--)
             {
                 a[i] = a[i - ];
             }
             a[].X = x;
             a[].Y = y;
             Invalidate();
         };
         t.Start();
     }
     bool dead(int x, int y)
     {
         ; 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);
         ; 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 aaa;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

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

class Haha extends JFrame {
    public static void main(String[] args) {
        new Haha();
    }
    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;
    final int[][] d = {{0, -1}, {1, 0}, {0, 1}, {-1, 0}};
    final int xsize = 50, ysize = 30;
    final int per = 20;
    BufferedImage bufferedImage = new BufferedImage(per * xsize, per * ysize,
            BufferedImage.TYPE_INT_ARGB);
    Timer t;

    public Haha() {
        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(Haha.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] = new Point(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) {
        Graphics2D gg = bufferedImage.createGraphics();
        gg.setColor(Color.gray);
        gg.fillRect(0, 0, getWidth(), getHeight());
        gg.setColor(Color.green);
        for (int i = 0; i < size; i++) {
            gg.fillRect(a[i].x * per, per * a[i].y, per, per);
        }
        gg.setColor(Color.red);
        gg.fillOval(food.x * per, food.y * per, per, per);
        g.drawImage(bufferedImage, 0, 0, null);
    }
}

贪吃蛇C#和JAVA实现的更多相关文章

  1. 贪吃蛇的java代码分析(一)

    自我审视 最近自己学习java已经有了一个多月的时间,从一开始对变量常量的概念一无所知,到现在能勉强写几个小程序玩玩,已经有了长足的进步.今天没有去学习,学校里要进行毕业答辩和拍毕业照了,于是请了几天 ...

  2. 贪吃蛇的java代码分析(二)

    代码剖析 贪吃蛇是一款十分经典的小游戏,对初入coding的朋友来说,拿贪吃蛇这样一个案例来练手十分合适,并不高的难度和成功后的成就感都是学习所必须的.下面我将依照我当时的思路,来逐步分析实现的整个过 ...

  3. 贪吃蛇的java代码分析(三)

    代码剖析 在上一篇文章中,我们完成了贪吃蛇部分代码的构造.回头审视我们写的代码与思路,会发现我们遗漏了一个重要的地方,那就是:贪吃蛇的自身移动.想必大家都知道,贪吃蛇自身是会自己移动的,并且会跟随你的 ...

  4. 以小时候玩的贪吃蛇为例,对于Java图像界面的学习感悟

    简介 正文 01.JFrame是啥? 02.JPanel 03. KeyListener 04.Runnable 05.游戏Running 06.游戏初始类编写 07.main 简介: 一直以来用代码 ...

  5. java贪吃蛇

    这个贪吃蛇有很多功能没有实现,比如说穿墙(本来可以实现,但是穿墙后,就会出现坐标混乱,吃不到食物了),还有碰到自己的身体死亡的情况也没有实现,现在我知道如何判断是否碰到身体,但是,我不知道,如何处理碰 ...

  6. Java小游戏贪吃蛇

    package snake; import java.awt.BorderLayout;import java.awt.Canvas;import java.awt.Color;import java ...

  7. java实现贪吃蛇游戏

    最简单的4个java类就可以实现贪吃蛇: main函数: package tcs; public class GreedSnake { public static void main(String[] ...

  8. 关于用Java写的贪吃蛇游戏的一些感想

    学习Java有那么一个月了,兴趣还是挺高的.然而最近老师布置的一个迷宫问题,着实让我头疼了一两个礼拜,以至于身心疲惫,困扰不安.无奈,暂且先放下这个迷宫问题,写个简单点的贪吃蛇程序,以此来提高低落的情 ...

  9. Java贪吃蛇游戏

    package snake.game; import java.awt.CardLayout; import java.awt.Color; import java.awt.Graphics;   i ...

随机推荐

  1. Jmeter之Bean shell使用(一)

    一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanS ...

  2. mysql密码相关

    Windows中修改密码在不同场景下,有以下几种方案: 方法1:用SET PASSWORD命令,具体更新密码步骤如下: c:>mysql -u root   mysql>set passw ...

  3. TCMalloc 安装和使用

    前面三篇译文<TCMalloc:线程缓冲的Malloc>.<使用TCMalloc的堆栈检查>.<使用TCMalloc进行堆栈分析>介绍了TCMalloc的基本原理, ...

  4. [转]菜鸟程序员之Asp.net MVC Session过期异常的处理

    本文转自:http://www.cnblogs.com/JustRun1983/p/3377652.html 小赵是刚毕业的计算机专业方面的大学生,4年的大学时间里面,他读过了很多编程方面的数据,也动 ...

  5. .Net程序员之Python基础教程学习----列表和元组 [First Day]

    一. 通用序列操作: 其实对于列表,元组 都属于序列化数据,可以通过下表来访问的.下面就来看看序列的基本操作吧. 1.1 索引: 序列中的所有元素的下标是从0开始递增的. 如果索引的长度的是N,那么所 ...

  6. js获取鼠标位置的各种方法

    在一些DOM操作中我们经常会跟元素的位置打交道,鼠标交互式一个经常用到的方面,令人失望的是不同的浏览器下会有不同的结果甚至是有的浏览器下没结果,这篇文章就上鼠标点击位置坐标获取做一些简单的总结,没特殊 ...

  7. CF 407B Long Path[观察性质 DP]

    B. Long Path time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  8. JAVA面向对象之一

    一.面向过程的思想和面向对象的思想 面向对象和面向过程的思想有着本质上的区别, 作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应 ...

  9. 新闻发布系统<分页>

    分页实现: 实现数据的分页显示,需要以下几个关键步骤: ①确定每页显示的总页数 ②计算显示的总页数 ③编写SQL语句 实现效果如图所示: 当点击下一页时,地址栏地址为?pageIndex=2 1.创建 ...

  10. 云计算之路-阿里云上:RDS用户的烦恼

    http://www.cnblogs.com/cmt/p/3586029.html *博主注:阿里云数据库真的这么可笑?