你好,我写了一个C++的,在VS上完美运行,希望能够帮到你。
#include<stdio.h>#include<stdlib.h>
#include<悔辩conio.h>
#include<time.h>
/*定义全局变量*/
int puzz[9] // 九格游戏数组
int i=0,j,k // i 初始化界面的提示语,j 获取空格位置,k 移动次数
int space // 空缺位铅宏置
/*自定义函数原型*/
void interface() // 界面,包括打印充填矩形和数字
void change(int a,int b) // 交换
void press() // 按键
void start() // 初始化和判断是否胜利
void start() // 初始化和判断是否碧激缺胜利
{
int a,b,c
int star[22]={300,120,320,160,360,160,320,200,340,240,300,200,260,240,280,200,240,160,280,160,300,120}
k=0
for(a=0a<8a++)
puzz[a]=a+1
puzz[8]=0
interface()
for(c=0c<100c++) // 随机打乱顺序
{
a=rand()%9
b=(a+2)%8 // 关于有无解问题,搞不清楚,引用的
change(a,b)
}
while(1)
{
interface()
for(a=0a<8a++)
if(puzz[a]!=a+1)
break
if(a==8)
{
drawpoly(11,star) // 五角星
setcolor(1) // 文本“SUCCESSFUL”颜色
setfillstyle(1,4) // 五角星填充色
floodfill(300,150,15) // 五角星内一点
outtextxy(260,180,"SUCCESSFUL!!")
getch()
start()
}
for(j=0j<=8j++)
if (puzz[j]==0)
break
space=j
press()
}
}
void interface() // 界面,包括打印充填矩形和数字
{
clearviewport() // 清楚屏幕图形
setbkcolor(6) // 设置背景色
setfillstyle(2,2) // 矩形块颜色
if(puzz[0]!=0)
bar(160,60,240,140)
if(puzz[1]!=0)
bar(260,60,340,140)
if(puzz[2]!=0)
bar(360,60,440,140)
if(puzz[3]!=0)
bar(160,160,240,240)
if(puzz[4]!=0)
bar(260,160,340,240)
if(puzz[5]!=0)
bar(360,160,440,240)
if(puzz[6]!=0)
bar(160,260,240,340)
if(puzz[7]!=0)
bar(260,260,340,340)
if(puzz[8]!=0)
bar(360,260,440,340)
gotoxy(25,7)
if(puzz[0]!=0)
printf("%d",puzz[0])
gotoxy(38,7)
if(puzz[1]!=0)
printf("%d",puzz[1])
gotoxy(50,7)
if(puzz[2]!=0)
printf("%d",puzz[2])
gotoxy(25,13)
if(puzz[3]!=0)
printf("%d",puzz[3])
gotoxy(38,13)
if(puzz[4]!=0)
printf("%d",puzz[4])
gotoxy(50,13)
if(puzz[5]!=0)
printf("%d",puzz[5])
gotoxy(25,19)
if(puzz[6]!=0)
printf("%d",puzz[6])
gotoxy(38,19)
if(puzz[7]!=0)
printf("%d",puzz[7])
gotoxy(50,19)
if(puzz[8]!=0)
printf("%d",puzz[8])
if(i==0)
{
printf("\n\n\n\n\n\t\tPress any key to dare ")
getch()
}
gotoxy(60,4) // 打印移动次数
printf("%d th",k)
i+=1
return
}
int main()
{
int gdriver=VGA,gmode=VGAHI
initgraph(&gdriver,&gmode,"c:\\tc30\\BGI")
srand((unsigned)time(NULL)) // 播种子
clearviewport() // 清屏
printf("\n\n\t\t\t/////////////////////////////\n")
printf("\n")
printf("\t\t\t\tPUZZLE GAME\n")
printf("\n")
printf("\t\t\t/////////////////////////////\n")
printf("\n\n\n\n\n\n\tPress any key to start game")
printf("\n\n\tPress Esc to exit\n\n\t")
if(getch()==27)
{
clrscr()
clearviewport()
printf("\n\n\n\t\t\t//////////////////////////////////\n")
printf("\n\t\t\t\tSee you next time\n")
printf("\n\t\t\t//////////////////////////////////\n")
printf("\n\n\n\n\n\t\t\tPress any key to exit ")
getch()
closegraph()
return 0
}
start()
return 0
}
//第一题:#includevoidfun(char*a[],char*b[]){intl/*获取较短数组的长度姿岁*/没脊if(strlen(*a)usingnamespacestdclassCircle{public:voidinput(double)//输入voidprint()//输出doublegetArea()//计算半径private:doubler//半迹察睁径}voidCircle::input(doublea){r=a}doubleCircle::getArea(){returnr*r*3.14159}voidCircle::print(){cout>ac.input(a)c.print()return0}我给你2个贪吃蛇c++代码
(1):
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
//方向键的ASCLL值:上72,左75,右77,下80
//背景颜色的代码: 0=黑色 1蓝色 2 绿色 3湖蓝色 4红色 5紫色 6黄色 7白色 8灰色 9淡蓝色扰汪
//**改变当前光标方块的背景颜色和字体颜色**//
void BackGround(unsigned int ForeColor = 7, unsigned int BackGroundColor = 0) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE) //获取控制台的句柄
SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10)//改变当前光标的背景和字体颜色
}
//**改变光标的位置**//
void gotoxy(int x, int y) {8
HANDLE handle
COORD coord //获取坐标轴结构体
coord.X = x
coord.Y = y
handle = GetStdHandle(STD_OUTPUT_HANDLE) //获取控制台句柄,值为-11
SetConsoleCursorPosition(handle, coord) //移动光标到x,y处
}
//**初始化地图数据**//
void restart(int bk[20][20], int look[4], int move[20][20]) {
//bk为总的地图数据记录整个地图,为兆困1时表示墙体,为2时表示果实,为3时表示蛇
//look记录数据,为0时表示朝向,为1时表示长度,为3时表示胜负情况,为4表示分数
//move记录蛇走过的路程,用来打印蛇时判断用
int pp, qq //用来记录获取的随机坐标
//接下来要初始化整个地图//
for(int i=0i<=16i++)
for (int j = 0j <= 16j++) {
if (i == 0 || i == 16 || j == 0 || j == 16) bk[i][j] = 1//1表示墙体
else bk[i][j] = 0//0表示什么都没有
move[i][j] = 0 //该数组用来记录蛇移动的轨迹
}
//将蛇初始化在8,8坐标上
bk[8][8] = 3
move[8][8] = 1//则此时8,8,上的轨迹就应该记录为1
move[0][0] = 1//用此来记录步数
pp = rand() % 15 + 1//范围是1-15
qq = rand() % 15 + 1
bk[pp][qq] = 2//表示这个位置有果实了
look[0] = 1//表示朝向,向上
look[1] = 1//表示长度
look[2] = 0//当为1是表示失败
look[3] = 0//记录得族李念分
//接下来要绘制地图//
for(int i=0i<=16i++)
for (int j = 0j <= 16j++) {
gotoxy(i * 2, j)//光标移动,每个光标都是矩形
switch (bk[i][j]) {
case 0:
BackGround(0, 0)
break//如果没有东西打印黑色
case 1:
BackGround(0, 1)
break//墙打印蓝色
case 2:
BackGround(0, 2)
break//果实打印绿色
case 3:
BackGround(0, 3)
break//蛇打印湖蓝色
default:
break
}
printf(" ")//地图中直接就是涂空格符
}
//接下来要显示积分//
gotoxy(35, 0)
BackGround(7, 0)//用白字黑底打印
printf("现在得分是:%d,请再接再厉!^_^", look[2])
}
//**运动主体**//
void map(int bk[20][20], int look[4], int xy[2], int move[20][20]) {
//bk是地图信息,look作数据记录,xy记录坐标,move记录蛇的运动轨迹
int b[10], qq=0, pp=0//b用来吸收输入,qq和pp用来随机初始化果实坐标
if (kbhit()) {//记录按下的是哪个方向键
b[0] = getch()//用b来记录
if (b[0] == 224) b[0] = getch()//如果为224表示为方向键,但是要再一次获取才行
if (b[0] == 72 &&look[0] != 2)
//如果输入的为上并且朝向不为下
look[0] = 1
if (b[0] == 80 &&look[0] != 1)
look[0] = 2
if (b[0] == 75 &&look[0] != 4)
look[0] = 3
if (b[0] == 77 &&look[0] != 3)
look[0] = 4
}
switch (look[0]) {
case 1:
//往上走
xy[1]--
break
case 2:
//往下走
xy[1]++
break
case 3:
//往左走
xy[0]--
break
case 4:
//往右走
xy[0]++
break
}
//接下来蛇就开始走动了//
move[0][0]++//蛇的步数加一
move[xy[0]][xy[1]] = move[0][0]//记录当前格子中蛇的轨迹
gotoxy(35, 2)
BackGround(7, 0)
printf("横坐标:%d,纵坐标:%d", xy[0],xy[1])
gotoxy(xy[0] * 2, xy[1])//这里蛇头就往前移动了
BackGround(0, 3)//与蛇体一个颜色
printf(" ")
//如果吃了果实//
if (bk[xy[0]][xy[1]] == 2) {
look[2]++//分数加一
look[1]++//长度加一
//更新分数
gotoxy(35, 0)
BackGround(7, 0)
printf("现在得分是:%d,请再接再厉!^_^", look[2])
while (bk[pp][qq] != 0) {
pp = rand() % 15 + 1
qq = rand() % 15 + 1
}
bk[pp][qq] = 2//将这个地方变为果实
gotoxy(pp * 2, qq)
BackGround(0, 2)
printf(" ")
}
//如果撞了墙或者自己//
if (bk[xy[0]][xy[1]] == 1 || bk[xy[0]][xy[1]] == 3) {
look[3] = 1//表示已经输了
gotoxy(6, 6)
BackGround(7, 0)
printf("你输了,最后得分:%d", look[2])
}
bk[xy[0]][xy[1]] = 3//使这个位置变成蛇
//接下来要检测蛇然后刷新蛇的位置//
for(int i=0i<=16i++)
for (int j = 0j <= 16j++) {
if (move[i][j] == move[xy[0]][xy[1]] - look[1]){
//如果符合这个条件,则表示蛇已经移动出这个位置了
//要删除这个位置的蛇尾巴
//一次只有一个方块会符合要求吧?
bk[i][j] = 0
gotoxy(i * 2, j)
BackGround(0, 0)
printf(" ")
break//一次只找一个
}
}
end:
}
int main() {
int bk[20][20], xy[2], move[20][20], look[4]
xy[1] = xy[0] = 8
srand((unsigned) time(NULL))//初始化随机种子
system("pause")
restart(bk, look, move)
while (look[3] == 0) {
Sleep(200)//休眠400ms一次
map(bk, look, xy, move)
}
system("pause")
printf("游戏结束,谢谢游玩!^_^")
return 0
}
(2):
#include <stdio.h>
#include <windows.h>
#include<conio.h>
#include <stdlib.h>
#include<time.h>
#define X 23//地图的x轴
#define Y 75//地图的y轴
#define UP 0
#define DOWN 1
#define LEFT 2
#define RIGHT 3
#define WAIT_TIME 200//等待蛇刷新的时间,可以说是速度 修改可变速
int map_0[X][Y]//地图
int Snake[X*Y][2]// 蛇
int Slength//蛇的长度
int direction
int score=0
bool pdEatFood=false
void csh()
void huaMap()
void huaSnake()
void gotoxy(int x,int y)
void move()
void intokey()
int check(int x,int y)
void putfood()
bool gameover()
void dy_fs()
int main()
{
csh()
huaMap()
putfood()
while(1)
{
huaSnake()
Sleep(WAIT_TIME)
intokey()
move()
dy_fs()
if(gameover())
{
system("cls") //清除屏幕内容
printf("Game Over\n")
system("pause")
getchar()
break
}
if(map_0[Snake[0][0]][Snake[0][1]]==-1)
{
map_0[Snake[0][0]][Snake[0][1]]=0
pdEatFood=true
putfood()
score+=10
}
}
return 0
}
void csh()//初始化
{
srand((unsigned)time(NULL))//设置种子为现在的时间
Slength=4
gotoxy(0,0)
CONSOLE_CURSOR_INFO cursor_info = {1, 0}//清除光标
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info)
int x,y
Snake[0][0]=X/2
Snake[0][1]=Y/2
for(x=0x<Xx++){
map_0[x][0]=1
map_0[x][Y-1]=1
}
for(y=1y<Y-1y++){
map_0[0][y]=1
map_0[X-1][y]=1
}
for(x=1x<4x++){ //初始化蛇的坐标
Snake[x][0]=Snake[0][0]+x
Snake[x][1]=Snake[0][1]
}
direction=UP
}
void huaMap()//画地图
{
int x,y
for(x=0x<X*1.01x++){
for(y=0y<Y*1.01y++){
if(map_0[x][y]==1){
printf("#")
}
if(map_0[x][y]==0){
printf(" ")
}
}
printf("\n")
}
}
void huaSnake()//画蛇
{
int x
for(x=0x<Slengthx++)
{
gotoxy(Snake[x][0],Snake[x][1])
printf("@")
}
}
void gotoxy(int i,int j)//移动光标
{
COORD position={j,i}
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),position)
}
void move()
{
int i
gotoxy(Snake[Slength-1][0],Snake[Slength-1][1])//擦除尾巴
printf(" ")
for(i=Slength-1i>0i--) //从尾巴开始,每一个点的位置等于它前面一个点的位置
{
Snake[i][0]=Snake[i-1][0]
Snake[i][1]=Snake[i-1][1]
}
switch(direction)
{
case UP:
Snake[0][0]--
break
case DOWN:
Snake[0][0]++
break
case LEFT:
Snake[0][1]--
break
case RIGHT:
Snake[0][1]++
break
}
if(pdEatFood){
Slength++
pdEatFood=false
}
}
void intokey()
{
if(kbhit()!=0) //kbhit()函数 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
{
char in
while(!kbhit()==0) //如果玩家输入了多个按键,以最后一个按键为准
in=getch()
switch(in)
{
case 'w':
case 'W':
if(direction!=DOWN) //防止缩头
direction=UP
break
case 's':
case 'S':
if(direction!=UP)
direction=DOWN
break
case 'a':
case 'A':
if(direction!=RIGHT)
direction=LEFT
break
case 'd':
case 'D':
if(direction!=LEFT)
direction=RIGHT
break
case 'p':
case 'P':
gotoxy(X,0)
system("pause")
gotoxy(X,0)
printf(" ") // 消去下面的按任意键继续
break
}
}
}
int check(int ii,int jj){// 检查是否能投放食物
if(map_0[ii][jj]==1)
return 0
if(ii==0 || jj==0 || ii==X-1 || jj==Y-1)
return 0
int i
for(i=0i<Slengthi++){
if(ii==Snake[i][0] &&jj==Snake[i][1])
return 0
}
return 1
}
void putfood()
{
int i,j
do{
i=rand()%X
j=rand()%Y
}while(check(i,j)==0)
map_0[i][j]=-1
gotoxy(i,j)
printf("$")
}
bool gameover()
{
bool isgameover=false
int sX,sY
sX=Snake[0][0],sY=Snake[0][1]
if(sX==0 || sX==X-1 || sY==0 || sY==Y-1)
isgameover=true
int i
for(i=1i<Slengthi++){
if(sX==Snake[i][0] &&sY==Snake[i][1])
isgameover=true
}
return isgameover
}
void dy_fs()
{
gotoxy(X,0)
printf("(c)Geek------2018.1.22")
gotoxy(X+1,0)
printf("最终得分: %d",score)
}
管庆帆c/c++大师欢迎分享,转载请注明来源:内存溢出
评论列表(0条)