/*贪吃蛇*/
#include<stdio.h>
#include<time.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
char qipan[20][80];
int snake = 1;
int change(int *head, int *tail, int *score, char *direction, int zuobiao[2][80])
{
int x, y;
switch(*direction)
{
case 72:
x = zuobiao[0][*head]-1;
y = zuobiao[1][*head];
break;
case 87:
x = zuobiao[0][*head]-1;
y = zuobiao[1][*head];
break;
case 80:
x = zuobiao[0][*head]+1;
y = zuobiao[1][*head];
break;
case 83:
x = zuobiao[0][*head]+1;
y = zuobiao[1][*head];
break;
case 75:
x = zuobiao[0][*head];
y = zuobiao[1][*head]-1;
break;
case 65:
x = zuobiao[0][*head];
y = zuobiao[1][*head]-1;
break;
case 68:
x = zuobiao[0][*head];
y = zuobiao[1][*head]+1;
break;
default:
x = zuobiao[0][*head];
y = zuobiao[1][*head]+1;
}
if(qipan[x][y] == '_' || qipan[x][y] == '|' || qipan[x][y] == '*')
return 1;
if(qipan[x][y] == ' ')
{
qipan[zuobiao[0][*tail]][zuobiao[1][*tail]]=' ';
*tail=(*tail+1)%80;
qipan[zuobiao[0][*head]][zuobiao[1][*head]]='*';
*head=(*head+1)%80;
zuobiao[0][*head]=x;
zuobiao[1][*head]=y;
qipan[x][y]='#';
return 0;
}
if(qipan[x][y] == '@')
{
qipan[zuobiao[0][*head]][zuobiao[1][*head]]='*';
*head=(*head+1)%80;
zuobiao[0][*head]=x;
zuobiao[1][*head]=y;
qipan[x][y]='#';
*score += 1;
return 0;
}
}
void gotoxy(int x,int y)//位置函数
{
COORD pos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void color(int a)//颜色函数
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void show_start()
{
gotoxy(20,0);
color(1);
int u;
for(u = 0; u < 18; u ++)
printf("* ");
gotoxy(20, 12);
for(u = 0; u < 18; u ++)
printf("* ");
gotoxy(28,2);
color(13);
printf("S N A K E G A M E");
gotoxy(31, 5);
color(14);
printf("#");
gotoxy(34, 5);
color(11);
printf("One snake");
gotoxy(34, 7);
printf("Two snakes");
gotoxy(28,9);
printf("The speed you want: ");
gotoxy(31, 5);
char temp = 'a';
color(14);
while(1)
{
while(!kbhit());
temp = getch();
if(temp == 72 || temp == 80)
{
gotoxy(31,5+2*(snake-1));
printf(" ");
snake = snake % 2 + 1;
gotoxy(31,5+2*(snake-1));
printf("#");
gotoxy(31,5+2*(snake-1));
}
if(temp == 13)
break;
}
gotoxy(27,10);
color(10);
printf("GOOD LUCK TO YOU !");
}
int main()
{
srand(time(0));
int head1 = 3, tail1 = 0, score1 = 0;
int head2 = 3, tail2 = 0, score2 = 0;
int zuobiao1[2][80];
int zuobiao2[2][80];
/*棋盘 20×80 初始化*/
for(int i = 0; i < 20; i++)
{
for(int j = 0; j < 80; j++)
{
qipan[i][j] = ' ';
}
}
for(int i = 0; i < 20; i++)
{
qipan[i][0] = qipan[i][79] = '|';//第一列、最后一列是墙20*1
}
for(int i = 0; i < 80; i++)
{
qipan[0][i] = qipan[19][i] = '_';//第一行、最后一行是墙1*80
}
/*蛇的坐标 2×8 初始化, 将蛇放到棋盘上*/
int x1 = 1, x2 = 18, y, temp = 0;
for(int m = tail1; m < head1; m++)
{
zuobiao1[0][m] = x1;//初始行号
y = zuobiao1[1][m] = ++temp;//初始列号
qipan[x1][y] = '*';
}
zuobiao1[0][head1] = x1;//初始行号
y = zuobiao1[1][head1] = ++temp;//初始列号
qipan[x1][y] = '#';//蛇头
show_start();
if(snake == 2)
{
temp = 0;
for(int m = tail2; m < head2; m++)
{
zuobiao2[0][m] = x2;//初始行号
y = zuobiao2[1][m] = ++temp;//初始列号
qipan[x2][y] = '*';
}
zuobiao2[0][head2] = x2;//初始行号
y = zuobiao2[1][head2] = ++temp;//初始列号
qipan[x2][y] = '#';//蛇头
}
clock_t start;
int timeover;
char direction1 = 77;//72 88 75 77
char direction2 = 68;//87 83 65 68
char new_direction;
char new_direction1 ;
char new_direction2 ;
int gamespeed;
gotoxy(48, 9);
color(14);
scanf("%d", &gamespeed);
int rand_i = rand()%18 + 1;
int rand_j = rand()%78 + 1;
qipan[rand_i][rand_j] = '@';
system("cls");
gotoxy(10, 1);
color(10);
printf("Your present score: ");
gotoxy(30, 1);
color(11);
printf("%d", score1);
gotoxy(0,4);
for(int i = 0; i < 20; i++)//打印出棋盘
for(int j = 0; j < 80; j++)
{
if(qipan[i][j] == '*' || qipan[i][j] == '#')
color(13);
else if(qipan[i][j] == '@')
color(12);
else
color(15);
printf("%c", qipan[i][j]);
}
while(1)//87 83 65 68
{
for(int i = 0; i < 20; i++)//打印出棋盘
for(int j = 0; j < 80; j++)
{
if(qipan[i][j] == '*' || qipan[i][j] == '#')
{
gotoxy(j, i+4);
color(13);
}
if(qipan[i][j] == '@')
{
gotoxy(j, i+4);
color(12);
}
if(qipan[i][j] == '_' || qipan[i][j] == '|')
{
gotoxy(j, i+4);
color(15);
}
printf("%c", qipan[i][j]);
}
for(int q = 0; q < 3; q++)
{
gotoxy(rand()%78 + 1, rand()%18 + 5 );
color(14);
printf("+");
}
start = clock();
timeover = 1;
while(!kbhit() && (timeover = clock() - start/CLOCKS_PER_SEC <= gamespeed));
if(timeover)//有按键
{
if(snake == 1)
getch();
new_direction = getch();
if(snake == 2)
{
if(new_direction == 87 || new_direction ==83 ||new_direction == 65||new_direction == 68)
{
new_direction2 = new_direction;
new_direction1 = direction1;
if(new_direction2 + direction2 == 170 || new_direction2 + direction2 == 133)
{
change(&head1, &tail1, &score1, &direction1, zuobiao1);
change(&head2, &tail2, &score2, &direction2, zuobiao2);
continue;
}
}
if(new_direction == 72 || new_direction ==80 ||new_direction == 75||new_direction == 77)
{
new_direction1 = new_direction;
new_direction2 = direction2;
if(new_direction1 + direction1 == 152)
{
change(&head1, &tail1, &score1, &direction1, zuobiao1);
change(&head2, &tail2, &score2, &direction2, zuobiao2);
continue;
}
}
}
if(snake == 1 && (new_direction == 72 || new_direction ==80 ||new_direction == 75||new_direction == 77))
{
new_direction1 = new_direction;
if(new_direction1 + direction1 == 152)
{
change(&head1, &tail1, &score1, &direction1, zuobiao1);
continue;
}
}
}
else
{
if(snake == 2)
{
new_direction2 = direction2;
new_direction1 = direction1;
}
else
{
new_direction1 = direction1;
}
}
if(snake == 1)
{
direction1 = new_direction1;
if(change(&head1, &tail1, &score1, &direction1, zuobiao1) == 1)
{
system("cls");
gotoxy(30,10);
color(7);
printf("G A M E O V E R !");
gotoxy(0,20);
color(1);
return 0;
}
}
if(snake == 2)
{
direction1 = new_direction1;
if(change(&head1, &tail1, &score1, &direction1, zuobiao1) == 1)
{
system("cls");
gotoxy(30,8);
color(7);
printf("G A M E O V E R !");
gotoxy(30,10);
printf("Snake Two is the Hero!");
gotoxy(0,20);
color(1);
return 0;
}
direction2 = new_direction2;
if(change(&head2, &tail2, &score2, &direction2, zuobiao2) == 1)
{
system("cls");
gotoxy(30,8);
color(7);
printf("G A M E O V E R !");
gotoxy(30,10);
printf("Snake One is the Hero!");
gotoxy(0,20);
color(1);
return 0;
}
}
int randnew = 0;
for(int i = 0; i < 20; i++)//打印出棋盘
for(int j = 0; j < 80; j++)
if(qipan[i][j] == '@')
{
randnew ++;
}
if(randnew == 0)
{
rand_i = rand()%18 + 1;
rand_j = rand()%78 + 1;
qipan[rand_i][rand_j] = '@';
}
if(snake == 2 && randnew == 1)
{
rand_i = rand()%18 + 1;
rand_j = rand()%78 + 1;
qipan[rand_i][rand_j] = '@';
}
gotoxy(30, 1);
printf("%d", score1);
if(snake == 2)
{
gotoxy(30,2);
printf("%d", score2);
}
}
}
- C++ 简单的控制台贪吃蛇小游戏
由于比较懒,所以不怎么写,觉得这样不应该.我应该对自己学的做出整理,不管是高端低端,写出来是自己的. // 贪吃蛇.cpp : 定义控制台应用程序的入口点. // #include "std ...
- 贪吃蛇小游戏-----C语言实现
1.分析 众所周知,贪吃蛇游戏是一款经典的益智游戏,有PC和手机等多平台版本,既简单又耐玩.该游戏通过控制蛇头方向吃食物,从而使得蛇变得越来越长,蛇不能撞墙,也不能装到自己,否则游戏结束.玩过贪吃蛇的 ...
- JS高级---案例:贪吃蛇小游戏
案例:贪吃蛇小游戏 可以玩的小游戏,略复杂,过了2遍,先pass吧 先创建构造函数,再给原型添加方法.分别创建食物,小蛇和游戏对象. 食物,小蛇的横纵坐标,设置最大最小值,运动起来的函数,按上下左右键 ...
- Java GUI学习,贪吃蛇小游戏
JAVA GUI练习 贪吃蛇小游戏 前几天虽然生病了,但还是跟着狂神学习了GUI的方面,跟着练习了贪吃蛇的小项目,这里有狂神写的源码点我下载,还有我跟着敲的点我下载,嘿嘿,也就注释了下重要的地方,这方 ...
- 用GUI实现java版贪吃蛇小游戏
项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public static void main(String[] args) { JFrame jFr ...
- Java 用java GUI写一个贪吃蛇小游戏
目录 主要用到 swing 包下的一些类 上代码 游戏启动类 游戏数据类 游戏面板类 代码地址 主要用到 swing 包下的一些类 JFrame 窗口类 JPanel 面板类 KeyListener ...
- html5面向对象做一个贪吃蛇小游戏
canvas加面向对象方式的贪吃蛇 2016-08-25 这个小游戏可以增加对面向对象的理解,可以加强js逻辑能力,总之认真自己敲一两遍收获还是不少啊!!适合刚学canvas的同学练习!! 废话不多说 ...
- 用python+pygame写贪吃蛇小游戏
因为python语法简单好上手,前两天在想能不能用python写个小游戏出来,就上网搜了一下发现了pygame这个写2D游戏的库.了解了两天再参考了一些资料就开始写贪吃蛇这个小游戏. 毕竟最开始的练手 ...
- Java贪吃蛇小游戏
贪吃蛇 思路 首先构思游戏布局,计算合理的坐标系. 绘制静态数据(广告.初始小蛇.提示信息.棋盘) 添加键盘监听事件,改变游戏状态以及小蛇运动方向 添加定时器,让小蛇在一段时间内移动一定的距离 随机产 ...
随机推荐
- ural 1586. Threeprime Numbers
这道题看着别人的代码写的. #include <cstdio> #include <cstring> #define m 1000000009 using namespace ...
- Codeforces 429B Working out
http://codeforces.com/contest/429/problem/B 题意:一个从左下到右上,一个从左上到右下,要求只相交一次,求整个路径和的最大值 思路:发现可以枚举交点,然后算到 ...
- STARTUP.A51详解及如何使能可重入函数
$NOMOD51 ;Ax51宏汇编器控制命令:禁止预定义的8051;------------------------------------------------------------ ...
- 文件锁及其实例,底层文件I/O操作,基本文件操作和实例,Linux中文件及文件描述符概述
http://blog.csdn.net/rl529014/article/details/51336161 http://blog.csdn.net/rl529014/article/details ...
- 树莓派 (Raspberry Pi) 是什么?普通人怎么玩?(私有云NAS也会有;上传到百度盘的功能nas也有)
作者:王震宇链接:https://www.zhihu.com/question/20859055/answer/54734499来源:知乎著作权归作者所有,转载请联系作者获得授权. 我两年前买的(约2 ...
- 黑马程序员_Java面向对象2_继承
4.面向对象_继承 4.1继承的概述 提高了代码的复用性. 让类与类之间产生了关系,有了这个关系,才有多态的特性. 注意:千万不要为了获取其他类的功能而去继承,简化代码而继承.必须是类与类之间有所属关 ...
- 漫谈MySQL primaryKey
主键没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为“PRIMARY KEY”,是只可意会不可言传的东西.下面让我用通俗,甚至有些低俗的语言为您简单介绍一下MySQL的主键. ...
- 实战ffs函数
这个函数是返回整形的最低位1的位置 自己写是这个样子的: /* Find the first bit set in I. */ int lx_ffs(int i) { int index = 0, r ...
- Linux下的压缩和解压
1. gzip, bzip2 能否直接压缩目录呢?不可以 2. 请快速写出,使用gzip和bzip2压缩和解压一个文件的命令.压缩:gzip 1.txt bzip2 1.txt解压:gzip -d 1 ...
- 关闭程序 提示 C#
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dr = MessageBox ...