找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1938|回复: 1
收起左侧

彩色贪吃蛇C语言程序

[复制链接]
ID:128335 发表于 2016-6-27 19:41 | 显示全部楼层 |阅读模式
  1. #include <graphics.h>
  2. #include <stdlib.h>
  3. #define N 200
  4. #define up 0x4800
  5. #define down 0x5000
  6. #define left 0x4b00
  7. #define right 0x4d00
  8. #define esc 0x011b
  9. #define Y 0x1579
  10. #define n 0x316e
  11. int gamespeed; /* [font=宋体]游戏速度 [/font][font=Calibri]*/[/font]
  12. int i, key, color;
  13. int score = 0; /* [font=宋体]游戏分数 [/font][font=Calibri]*/[/font]
  14. char cai48H[] =
  15. {
  16.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  17.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  18.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  19.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  20.     0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0E, 0x00,
  21.     0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x1C, 0x00,
  22.     0x00, 0x00, 0x20, 0x00, 0x38, 0x00, 0x00, 0x00,
  23.     0x40, 0x00, 0x78, 0x00, 0x00, 0x01, 0x80, 0x40,
  24.     0x70, 0x00, 0x00, 0x03, 0x80, 0xC0, 0xE0, 0x00,
  25.     0x00, 0x07, 0x80, 0x80, 0xC0, 0x00, 0x00, 0x0E,
  26.     0x11, 0x81, 0xC0, 0x00, 0x00, 0x08, 0x61, 0x01,
  27.     0x80, 0x00, 0x00, 0x00, 0x23, 0x03, 0x04, 0x00,
  28.     0x00, 0x02, 0x02, 0x00, 0x06, 0x00, 0x00, 0x1E,
  29.     0x04, 0x00, 0x0F, 0x00, 0x00, 0x1C, 0x1F, 0x80,
  30.     0x1E, 0x00, 0x00, 0x08, 0x3F, 0x80, 0x3C, 0x00,
  31.     0x00, 0x00, 0xFF, 0x80, 0x38, 0x00, 0x00, 0x03,
  32.     0xFF, 0x80, 0x78, 0x00, 0x00, 0x0F, 0xF8, 0x00,
  33.     0xF0, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0xE0, 0x00,
  34.     0x03, 0xFF, 0xFC, 0x01, 0x80, 0x00, 0x03, 0xC0,
  35.     0xFF, 0x01, 0x03, 0x80, 0x01, 0x01, 0xFF, 0x00,
  36.     0x03, 0x80, 0x00, 0x01, 0x3F, 0x00, 0x07, 0x80,
  37.     0x00, 0x02, 0x11, 0x00, 0x07, 0x00, 0x00, 0x00,
  38.     0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00,
  39.     0x0E, 0x00, 0x00, 0x08, 0x10, 0x00, 0x1C, 0x00,
  40.     0x00, 0x30, 0x10, 0x00, 0x18, 0x00, 0x00, 0x70,
  41.     0x10, 0x00, 0x30, 0x00, 0x01, 0xE0, 0x10, 0x00,
  42.     0x70, 0x00, 0x03, 0x80, 0x10, 0x00, 0x60, 0x00,
  43.     0x00, 0x00, 0x30, 0x00, 0xE0, 0x00, 0x00, 0x00,
  44.     0xF0, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x70, 0x03,
  45.     0xC0, 0x00, 0x00, 0x00, 0x10, 0x07, 0x80, 0x00,
  46.     0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00,
  47.     0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C,
  48.     0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00,
  49.     0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00,
  50.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  51.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  52. };

  53. char she48H[] =
  54. {
  55.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  56.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  57.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  58.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  59.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
  60.     0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00,
  61.     0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00,
  62.     0x00, 0x0E, 0x00, 0x00, 0x00, 0x03, 0x00, 0x07,
  63.     0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00,
  64.     0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
  65.     0x00, 0x00, 0xF8, 0x00, 0x00, 0x02, 0x00, 0x07,
  66.     0x86, 0x00, 0x00, 0x02, 0x00, 0x18, 0x03, 0x00,
  67.     0x00, 0x02, 0x00, 0x00, 0x07, 0x80, 0x00, 0x03,
  68.     0xF0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0xFC, 0x00,
  69.     0x0C, 0x00, 0x00, 0x7E, 0x3F, 0x80, 0x00, 0x00,
  70.     0x01, 0xFE, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xE2,
  71.     0x39, 0x8C, 0x00, 0x00, 0x00, 0xC2, 0x30, 0x08,
  72.     0x00, 0x00, 0x00, 0xC2, 0x60, 0x08, 0x00, 0x00,
  73.     0x00, 0xC3, 0xE0, 0x08, 0x60, 0x00, 0x00, 0x7F,
  74.     0xE0, 0x01, 0xE0, 0x00, 0x00, 0x3F, 0x80, 0x1F,
  75.     0xE0, 0x00, 0x00, 0x1E, 0x00, 0x1F, 0x80, 0x00,
  76.     0x00, 0x1E, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x02,
  77.     0x38, 0x1E, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x1C,
  78.     0x00, 0x20, 0x00, 0x07, 0xFC, 0x18, 0x00, 0x20,
  79.     0x00, 0x1F, 0x0C, 0x10, 0x00, 0x20, 0x00, 0x7C,
  80.     0x04, 0x10, 0x00, 0x60, 0x01, 0xF0, 0x00, 0x10,
  81.     0x00, 0x60, 0x01, 0xE0, 0x00, 0x08, 0x00, 0xF0,
  82.     0x00, 0x80, 0x00, 0x08, 0x03, 0xF0, 0x00, 0x00,
  83.     0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x07,
  84.     0xFF, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0,
  85.     0x00, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00,
  86.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  87.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  88.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  89.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  90.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  91. };
  92. char tun48H[] =
  93. {
  94.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  95.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  96.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  97.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  98.     0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E,
  99.     0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00,
  100.     0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00,
  101.     0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00,
  102.     0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00,
  103.     0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x03,
  104.     0xF8, 0x00, 0x40, 0x00, 0x00, 0x00, 0x06, 0x07,
  105.     0xC0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00,
  106.     0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00,
  107.     0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x7F, 0xF8,
  108.     0x00, 0x00, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x00,
  109.     0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x1F,
  110.     0xFC, 0x3C, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x0E,
  111.     0x00, 0x00, 0x00, 0x04, 0x70, 0x07, 0x00, 0x00,
  112.     0x00, 0x00, 0x60, 0x03, 0x80, 0x00, 0x00, 0x00,
  113.     0xC0, 0x00, 0xC0, 0x00, 0x00, 0x01, 0x80, 0x00,
  114.     0x30, 0x00, 0x00, 0x01, 0x00, 0x3C, 0x18, 0x00,
  115.     0x00, 0x02, 0x03, 0xFF, 0x0C, 0x00, 0x00, 0x0C,
  116.     0x7F, 0xFF, 0x8E, 0x00, 0x00, 0x18, 0xFF, 0xFF,
  117.     0xC7, 0x80, 0x00, 0x78, 0xFE, 0x07, 0x87, 0xE0,
  118.     0x01, 0xF0, 0x70, 0x07, 0x03, 0xF8, 0x07, 0xE0,
  119.     0x70, 0x0E, 0x03, 0xFE, 0x00, 0x00, 0x38, 0x1E,
  120.     0x01, 0xFE, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x0C,
  121.     0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00,
  122.     0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFE,
  123.     0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
  124.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  125.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  126.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  127.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  128.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  129.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  130. };
  131. char dan48H[] =
  132. {
  133.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  134.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  135.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  136.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  137.     0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF,
  138.     0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x80, 0x00,
  139.     0x00, 0x03, 0xFF, 0x80, 0x40, 0x00, 0x00, 0x01,
  140.     0xF1, 0x80, 0x40, 0x00, 0x00, 0x01, 0x81, 0x80,
  141.     0xE0, 0x00, 0x00, 0x00, 0x01, 0x93, 0xF0, 0x00,
  142.     0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00,
  143.     0x21, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x21, 0xF8,
  144.     0x00, 0x00, 0x00, 0x00, 0x61, 0xC0, 0x00, 0x00,
  145.     0x00, 0x00, 0x61, 0x80, 0x00, 0x00, 0x00, 0x00,
  146.     0xF3, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
  147.     0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00,
  148.     0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x02,
  149.     0x00, 0xFC, 0x00, 0x00, 0x00, 0x04, 0x02, 0x1F,
  150.     0x00, 0x00, 0x00, 0x08, 0x03, 0x01, 0xC0, 0x00,
  151.     0x00, 0x38, 0x03, 0x00, 0x7C, 0x00, 0x00, 0xF8,
  152.     0x07, 0xF8, 0x3F, 0xC0, 0x01, 0xF0, 0x3F, 0xFE,
  153.     0x3F, 0xF8, 0x03, 0xC1, 0xFF, 0x0F, 0x1F, 0xF8,
  154.     0x00, 0x01, 0xE3, 0x0F, 0x0F, 0xF0, 0x00, 0x01,
  155.     0xC3, 0x0E, 0x00, 0x00, 0x00, 0x01, 0x83, 0xFC,
  156.     0x00, 0x00, 0x00, 0x00, 0xC7, 0xF8, 0x00, 0x00,
  157.     0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00,
  158.     0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x03,
  159.     0x80, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00,
  160.     0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00,
  161.     0x1F, 0xF8, 0x20, 0x00, 0x00, 0x00, 0xFF, 0xFF,
  162.     0xE0, 0x00, 0x00, 0x07, 0xFF, 0x81, 0xE0, 0x00,
  163.     0x00, 0x07, 0xE0, 0x00, 0xE0, 0x00, 0x00, 0x03,
  164.     0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
  165.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  166.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  167.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  168.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  169. };

  170. char zuo16H[] =
  171. {
  172.     0x18, 0xC0, 0x18, 0xC0, 0x19, 0x80, 0x31, 0xFE,
  173.     0x33, 0xFE, 0x76, 0xC0, 0xF0, 0xFC, 0xB0, 0xFC,
  174.     0x30, 0xC0, 0x30, 0xC0, 0x30, 0xFE, 0x30, 0xFE,
  175.     0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x00, 0x00,
  176. };
  177. char zhe16H[] =
  178. {
  179.     0x03, 0x00, 0x03, 0x0C, 0x1F, 0xCC, 0x1F, 0xD8,
  180.     0x03, 0x30, 0xFF, 0xFE, 0xFF, 0xFE, 0x03, 0x00,
  181.     0x0F, 0xF8, 0x3F, 0xF8, 0xEC, 0x18, 0xCF, 0xF8,
  182.     0x0C, 0x18, 0x0F, 0xF8, 0x0F, 0xF8, 0x00, 0x00,
  183. };


  184. char tian16H[] =
  185. {
  186.     0x00, 0x00, 0x3F, 0xFC, 0x3F, 0xFC, 0x31, 0x8C,
  187.     0x31, 0x8C, 0x31, 0x8C, 0x3F, 0xFC, 0x3F, 0xFC,
  188.     0x31, 0x8C, 0x31, 0x8C, 0x31, 0x8C, 0x3F, 0xFC,
  189.     0x3F, 0xFC, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00,
  190. };
  191. char xue16H[] =
  192. {
  193.     0x33, 0x18, 0x19, 0x98, 0x08, 0xB0, 0x7F, 0xFC,
  194.     0x7F, 0xFC, 0x60, 0x0C, 0x1F, 0xF0, 0x1F, 0xF0,
  195.     0x00, 0xC0, 0x7F, 0xFC, 0x7F, 0xFC, 0x01, 0x80,
  196.     0x01, 0x80, 0x07, 0x80, 0x03, 0x00, 0x00, 0x00,
  197. };
  198. char ke16H[] =
  199. {
  200.     0x00, 0x00, 0x0C, 0x18, 0xFD, 0x98, 0xF8, 0xD8,
  201.     0x18, 0x58, 0xFE, 0x18, 0xFE, 0x98, 0x18, 0xD8,
  202.     0x3C, 0x58, 0x7E, 0x1E, 0xDB, 0xFE, 0x9B, 0xF8,
  203.     0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
  204. };


  205. struct Food/*[font=宋体]定义结构体存储食物的属性[/font][font=Calibri]*/[/font]
  206. {
  207.     int x; /* [font=宋体]食物的坐标 [/font][font=Calibri]*/[/font]
  208.     int y;
  209.     int yes; /* [font=宋体]值为[/font][font=Calibri]0[/font][font=宋体]表示屏幕上没有食物,值为[/font][font=Calibri]1[/font][font=宋体]表示屏幕上有食物 [/font][font=Calibri]*/[/font]
  210.     int color; /* [font=宋体]食物颜色 [/font][font=Calibri]*/[/font]
  211. } food;

  212. struct Snake/*[font=宋体]定义结构体存储蛇的属性[/font][font=Calibri]*/[/font]
  213. {
  214.     int x[N]; /* [font=宋体]每一节蛇的坐标 [/font][font=Calibri]*/[/font]
  215.     int y[N];
  216.     int color[N];/*[font=宋体]存储每一节蛇的颜色[/font][font=Calibri]*/[/font]
  217.     int node; /* [font=宋体]蛇的节数 [/font][font=Calibri]*/[/font]
  218.     int direction; /* [font=宋体]蛇移动的方向 [/font][font=Calibri]*/[/font]
  219.     int life; /* [font=宋体]蛇的生命,如果为[/font][font=Calibri]1[/font][font=宋体],蛇死,游戏结束 [/font][font=Calibri]*/[/font]
  220. } snake;

  221. void init(void)/*[font=宋体]图形驱动[/font][font=Calibri]*/[/font]
  222. {
  223.     int driver = DETECT, mode = 0;
  224.     registerbgidriver(EGAVGA_driver);
  225.     initgraph(&driver, &mode, "");
  226. }

  227. void drawmat(char *mat, int matsize, int x, int y, int color) /*[font=宋体]汉字点阵[/font][font=Calibri]*/[/font]
  228. {
  229.     int i, j, k, m;
  230.     m = (matsize - 1) / 8 + 1;
  231.     for(j = 0; j < matsize; j++)
  232.         for(i = 0; i < m; i++)
  233.             for(k = 0; k < 8; k++)
  234.                 if(mat[j*m+i]&(0x80 >> k))
  235.                     putpixel(x + i * 8 + k, y + j, color);
  236. }

  237. void showword(void)
  238. {
  239.     /* [font=宋体]调用汉字点阵输出程序,显示标题和作者信息 [/font][font=Calibri]*/[/font]
  240.     drawmat(cai48H, 48, 249, -4, 7);
  241.     drawmat(she48H, 48, 329, -4, 7);
  242.     drawmat(tun48H, 48, 409, -4, 7);
  243.     drawmat(dan48H, 48, 489, -4, 7);

  244.     drawmat(cai48H, 48, 250, -5, 4);
  245.     drawmat(she48H, 48, 330, -5, 4);
  246.     drawmat(tun48H, 48, 410, -5, 4);
  247.     drawmat(dan48H, 48, 490, -5, 4);
  248.     /*[font=宋体]作者 田学科[/font][font=Calibri]*/[/font]
  249.     drawmat(zuo16H, 16, 515, 465, 7);
  250.     drawmat(zhe16H, 16, 530, 465, 7);

  251.     drawmat(tian16H, 16, 550, 465, 7);
  252.     drawmat(xue16H, 16, 565, 465, 7);
  253.     drawmat(ke16H, 16, 580, 465, 7);
  254. }

  255. void draw(void)/*[font=宋体]画出四周的墙[/font][font=Calibri]*/[/font]
  256. {
  257.     if(color == 15)
  258.         color = 0;
  259.     setcolor(++color);
  260.     setlinestyle(SOLID_LINE, 0, 1);

  261.     for(i = 30; i <= 600; i += 10)
  262.     {
  263.         rectangle(i, 40, i + 10, 49);
  264.         rectangle(i, 451, i + 10, 460);
  265.     }
  266.     for(i = 40; i < 450; i += 10)
  267.     {
  268.         rectangle(30, i, 39, i + 10);
  269.         rectangle(601, i, 610, i + 10);
  270.     }
  271. }

  272. void prscore(void)
  273. {
  274.     /* [font=宋体]打印游戏分数 [/font][font=Calibri]*/[/font]
  275.     char str[10];
  276.     setfillstyle(SOLID_FILL, YELLOW);
  277.     bar(50, 10, 200, 30);
  278.     setcolor(6);
  279.     settextstyle(0, 0, 2);
  280.     sprintf(str, "score:%d", score);
  281.     outtextxy(55, 15, str);
  282. }

  283. void gameover(void)
  284. {
  285.     cleardevice(); /* [font=宋体]清屏函数 [/font][font=Calibri]*/[/font]
  286.     for(i = 0; i < snake.node; i++) /* [font=宋体]画出蛇死时的位置 [/font][font=Calibri]*/[/font]
  287.     {
  288.         setcolor(snake.color[i]);
  289.         rectangle(snake.x[i], snake.y[i], snake.x[i] + 10, snake.y[i] + 10);
  290.     }
  291.     prscore(); /* [font=宋体]显示分数 [/font][font=Calibri]*/[/font]
  292.     draw();
  293.     showword();
  294.     settextstyle(0, 0, 6);
  295.     setcolor(7);
  296.     outtextxy(103, 203, "GAME OVER");
  297.     setcolor(RED);
  298.     outtextxy(100, 200, "GAME OVER");
  299. }

  300. void gameplay(void)/* [font=宋体]玩游戏的具体过程 [/font][font=Calibri]*/[/font]
  301. {
  302.     int flag, flag1;
  303.     randomize();
  304.     prscore();
  305.     gamespeed = 50000;
  306.     food.yes = 0; /* food.yes=0[font=宋体]表示屏幕上没有食物 [/font][font=Calibri]*/[/font]
  307.     snake.life = 1; /* snake.life=1[font=宋体]表示蛇是活着的 [/font][font=Calibri]*/[/font]
  308.     snake.direction = 4; /* [font=宋体]表示蛇的初始方向为向右 [/font][font=Calibri]*/[/font]
  309.     snake.node = 2; /* [font=宋体]蛇的初始化为两节 [/font][font=Calibri]*/[/font]
  310.     snake.color[0] = 2; /*[font=宋体]两节蛇头初始化为绿色[/font][font=Calibri]*/[/font]
  311.     snake.color[1] = 2;
  312.     snake.x[0] = 100;
  313.     snake.y[0] = 100;
  314.     snake.x[1] = 110;
  315.     snake.y[1] = 100;
  316.     food.color = random(15) + 1;
  317.     while(1)
  318.     {
  319.         while(1)
  320.         {
  321.             if(food.yes == 0) /* [font=宋体]如果蛇活着 [/font][font=Calibri]*/[/font]
  322.             {
  323.                 while(1)
  324.                 {
  325.                     flag = 1;
  326.                     food.yes = 1;
  327.                     food.x = random(56) * 10 + 40;
  328.                     food.y = random(40) * 10 + 50;
  329.                     for(i = 0; i < snake.node; i++)
  330.                     {
  331.                         if(food.x == snake.x[i] && food.y == snake.y[i])
  332.                             flag = 0;
  333.                     }
  334.                     if(flag) break;
  335.                 }
  336.             }
  337.             if(food.yes)
  338.             {
  339.                 setcolor(food.color);
  340.                 rectangle(food.x, food.y, food.x + 10, food.y + 10);
  341.             }

  342.             for(i = snake.node - 1; i > 0; i--)
  343.             {
  344.                 snake.x[i] = snake.x[i-1];
  345.                 snake.y[i] = snake.y[i-1];
  346.             }

  347.             switch(snake.direction)
  348.             {
  349.             case 1:
  350.                 snake.y[0] -= 10;
  351.                 break;
  352.             case 2:
  353.                 snake.y[0] += 10;
  354.                 break;
  355.             case 3:
  356.                 snake.x[0] -= 10;
  357.                 break;
  358.             case 4:
  359.                 snake.x[0] += 10;
  360.                 break;
  361.             }

  362.             for(i = 3; i < snake.node; i++)
  363.             {
  364.                 if(snake.x[i] == snake.x[0] && snake.y[i] == snake.y[0])
  365.                 {
  366.                     gameover();
  367.                     snake.life = 0;
  368.                     break;
  369.                 }
  370.             }

  371.             if(snake.x[0] < 40 || snake.x[0] > 590 || snake.y[0] < 50 || snake.y[0] > 440)
  372.             {
  373.                 gameover();
  374.                 snake.life = 0;
  375.             }

  376.             if(snake.life == 0)
  377.                 break;

  378.             if(snake.x[0] == food.x && snake.y[0] == food.y) /*[font=宋体]蛇吃掉食物[/font][font=Calibri]*/[/font]
  379.             {
  380.                 setcolor(0);
  381.                 rectangle(food.x, food.y, food.x + 10, food.y + 10);
  382.                 snake.x[snake.node] = -20;
  383.                 snake.y[snake.node] = -20;
  384.                 snake.color[snake.node] = food.color;
  385.                 snake.node++;
  386.                 food.yes = 0;
  387.                 food.color = random(15) + 1;
  388.                 score += 10;
  389.                 prscore();
  390.                 if(score % 100 == 0 && score != 0)
  391.                 {
  392.                     for(i = 0; i < snake.node; i++) /* [font=宋体]画出蛇 [/font][font=Calibri]*/[/font]
  393.                     {
  394.                         setcolor(snake.color[i]);
  395.                         rectangle(snake.x[i], snake.y[i], snake.x[i] + 10, snake.y[i] + 10);
  396.                     }
  397.                     sound(200);
  398.                     delay(50000);
  399.                     delay(50000);
  400.                     delay(50000);
  401.                     delay(50000);
  402.                     delay(50000);
  403.                     delay(50000);
  404.                     nosound();
  405.                     gamespeed -= 5000;
  406.                     draw();
  407.                 }
  408.                 else
  409.                 {
  410.                     sound(500);
  411.                     delay(500);
  412.                     nosound();
  413.                 }
  414.             }

  415.             for(i = 0; i < snake.node; i++) /* [font=宋体]画出蛇 [/font][font=Calibri]*/[/font]
  416.             {
  417.                 setcolor(snake.color[i]);
  418.                 rectangle(snake.x[i], snake.y[i], snake.x[i] + 10, snake.y[i] + 10);
  419.             }

  420.             delay(gamespeed);
  421.             delay(gamespeed);
  422.             flag1 = 1;
  423.             setcolor(0);
  424.             rectangle(snake.x[snake.node-1], snake.y[snake.node-1],
  425.                       snake.x[snake.node-1] + 10, snake.y[snake.node-1] + 10);

  426.             if(kbhit() && flag1 == 1) /*[font=宋体]如果没按有效键就重新开始循环[/font][font=Calibri]*/[/font]
  427.             {
  428.                 flag1 = 0;
  429.                 key = bioskey(0);
  430.                 if(key == esc)
  431.                     exit(0);
  432.                 else if(key == up && snake.direction != 2)
  433.                     snake.direction = 1;
  434.                 else if(key == down && snake.direction != 1)
  435.                     snake.direction = 2;
  436.                 else if(key == left && snake.direction != 4)
  437.                     snake.direction = 3;
  438.                 else if(key == right && snake.direction != 3)
  439.                     snake.direction = 4;
  440.             }
  441.         }
  442.         if(snake.life == 0) /*[font=宋体]如果蛇死了就退出循环[/font][font=Calibri]*/[/font]
  443.             break;
  444.     }
  445. }

  446. void main(void)
  447. {
  448.     while(1)
  449.     {
  450.         color = 0;
  451.         init();
  452.         cleardevice();
  453.         showword();
  454.         draw();
  455.         gameplay();
  456.         setcolor(15);
  457.         settextstyle(0, 0, 2);
  458.         outtextxy(200, 400, "CONTINUE(Y/N)?");
  459.         while(1)
  460.         {
  461.             key = bioskey(0);
  462.             if(key == Y || key == n || key == esc)
  463.                 break;
  464.         }
  465.         if(key == n || key == esc)
  466.             break;
  467.     }
  468.     closegraph();
  469. }
复制代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:125378 发表于 2016-7-2 17:16 | 显示全部楼层
有错误。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表