📄 cgame.txt
字号:
/* WIN-TC BGI 图形编程模板 */ 用的是win-tc 1.9或更高
#i nclude "stdio.h"
#i nclude "dos.h "
#i nclude "stdlib.h"
#i nclude "Conio.h"
#i nclude "graphics.h"
#define closegr closegraph
void *buffer;
FILE *fp;
void hz(int x,int y,int a,int COL,int b,char *s) {
int ROW;
char buffer[32];
register m,n,i,j,k;
unsigned char qh,wh;
unsigned long offset;
ROW=COL;
while(*s)
{
qh=*(s)-0xa0;
wh=*(s+1)-0xa0;
offset=(94*(qh-1)+(wh-1))*32L;
fseek(fp,offset,SEEK_SET);
fread(buffer,32,1,fp);
for (i=0;i<16;i++)
for(n=0;n<ROW;n++)
for(j=0;j<2;j++)
for(k=0;k<8;k++)
for(m=0;m<COL;m++)
if (((buffer[i*2+j]>>(7-k))&0x1)!=NULL)
putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,b);
s+=2;
x+=a;
}
}
’以上是用于从hz16文件读写汉字不用管
initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd, &gm, "");
}
‘以上是用开建立图形模式
int main(void)
{
int i;
int m;
FILE *fpp;
int apath[20][20];
int mi=0;
int c;
int fx,fy;
int x=5;
int y=9;
int path[20][20]={
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,1,0,0,8,0,1,0,0,0,0,0,0,0,0,1,
1,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,0,0,1,
1,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,
1,0,0,0,1,0,1,0,0,8,0,1,0,0,0,0,0,0,0,1,
1,0,0,0,1,0,8,0,0,0,0,1,0,0,0,0,0,0,0,1,
1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
};
’以上定地图数组
initgr(); /* BGI初始化 */
rmap:
‘读hz16字库
((fp=fopen("C:\\Win-TC\\ccdos\\Hzk16","rb"))==NULL)
{ printf("Can't open haz16,Please add it");
getch(); closegraph(); exit(0);
}
‘用两个for从数组读地图数,是8有箱子,否则1为墙,0为空地,9是搬运工
/* for (fx=0;fx<20;fx++) //双循环画地图
{
for (fy=0;fy<20;fy++)
{
if (path[fx][fy]==1) {circle(fy*10+100, fx*10+100,5);} //数组的地址[x][y]与地图circle(y,x,5) 中的x,y相反?
if (path[fx][fy]==8) {circle(fy*10+100, fx*10+100,1);}
if (path[fx][fy]==9) {circle(fy*10+100, fx*10+100,2);}
}
}
*/
sw:
c=getch();
'读键值看上下右左,wsda键
h(c)
{
case 'w':{
‘先看x-1,y是不是没有箱子8或墙0,没有就可以x-1,即上移,注意其中数组和屏幕对应关系是反的。x-1是向上移
if (path[x-1][y]==0)
{path[x][y]=0;
x=x-1;
path[x][y]=5;
}
if (path[x-1][y]==8)
{
//printf("hi ,how do you do");
hz(10,245,25,1,4,"你是谁呀");
getche();
if (path[x-1][y]==8&&path[x-2][y]!=1&&path[x-2][y]!=8)
{path[x][y]=0;
x=x-1;
path[x][y]=5;
path[x-1][y]=8;
}
}
‘这面看是不是碰到箱了,碰到了打出“不要打我呀”,以后改为rpg游戏用做对话用
if (path[x-1][y]==9)
{
//printf("no good");
hz(10,245,25,1,4,"不要打我呀!");
getche();
}
}
break;
case 's':{
if (path[x+1][y]==0)
{path[x][y]=0;
x=x+1;
path[x][y]=5;
}
if (path[x+1][y]==8&&path[x+2][y]!=1&&path[x+2][y]!=8)
{path[x][y]=0;
x=x+1;
path[x][y]=5;
path[x+1][y]=8;
}
}
break;
case 'a':{
if (path[x][y-1]==0)
{path[x][y]=0;
y=y-1;
path[x][y]=5;
}
if (path[x][y-1]==8&&path[x][y-2]!=1&&path[x][y-2]!=8)
{path[x][y]=0;
y=y-1;
path[x][y]=5;
path[x][y-1]=8;
}
}
break;
case 'd':
{
if (path[x][y+1]==0)
{path[x][y]=0;
y=y+1;
path[x][y]=5;
}
if (path[x][y+1]==8&&path[x][y+2]!=1&&path[x][y+2]!=8)
{path[x][y]=0;
y=y+1;
path[x][y]=5;
path[x][y+1]=8;
}
}
break;
case 'q':{
goto en;
}
}
//if (path[x][y+1]==8)exit();
//if (path[x][y-1]==8)exit();
//if (path[x+1][y]==8)exit();
//if (path[x-1][y]==8)exit();
//if(path[18][18]==0&&path[4][1]==1) goto dn;
cleardevice();
for (fx=0;fx<20;fx++) //双循环画地图
{
for (fy=0;fy<20;fy++)
{
if (path[fx][fy]==1) {circle(fy*10+100, fx*10+100,5);} //数组的地址[x][y]与地图circle(y,x,5) 中的x,y相反?
if (path[fx][fy]==8) {circle(fy*10+100, fx*10+100,1);}
if (path[fx][fy]==5) {circle(fy*10+100, fx*10+100,3);}
if (path[fx][fy]==9) {circle(fy*10+100, fx*10+100,8);}
}
}
if (path[8][10]!=8&&path[8][10]!=5) {circle(10*10+100, 8*10+100,2);} //判断是否推抵?
if (path[9][10]!=8&&path[9][10]!=5) {circle(10*10+100, 9*10+100,2);}
if (path[10][10]!=8&&path[10][10]!=5) {circle(10*10+100, 10*10+100,2);}
if (path[8][10]==8&&path[9][10]==8&&path[10][10]==8){
mi=20;
goto dn;
}
goto sw;
dn: /* 暂停一下,看看前面绘图代码的运行结果 */
/* 恢复TEXT屏幕模式 */
//outtextxy(200,200,"sadfasfasfsafsaf");
// cleardevice();
hz(10,245,25,1,4,"关键在于参与!这我是这里持游戏 是中中是我游戏");
hz(10,145,25,1,4,"你看过我的游戏吗,这就是其中的一个。");
getch();
'下面是建立读地图文件,也就是从test.dat读出数组值,并将现在地图数组附 值
cleardevice();
fpp=fopen("test.dat", "r"); /*打开文字文件只读*/
//fgets(s, 24, fp); /*从文件中读取23个字符*/
//printf("%s", s); /*输出所读的字符串*/
// fscanf(fp, "%d", &i); /*读取整型数*/ //putchar(fgetc(fp)); /*读取一个字符同时输出*/
// fscanf(fp, "%d", &m);
for (i=0;i<20;i++)
{for (m=0;m<20;m++)
fscanf(fpp,"%d",&apath[i][m+mi]);
}
//printf("%d", i); /*输出所读整型数*/
//printf("%d", m);
for (i=0;i<20;i++)
{for (m=0;m<20;m++)
path[i][m]= apath[i][m+mi];
//fgets(m, 17, fp); /*读取16个字符*/
//puts(m); /*输出所读字符串*/
}
fclose(fp);
goto rmap;
en:
getch();
closegr();
return 0;
}
'地图写入,下面是建立test.dat文件,注意将其放入同一目录中
#i nclude<stdio.h>
main()
{
//char *s="That's good news"; /*定义字符串指针并初始化*/
int i;
int m;
int apath[20][40]={
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,
6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,1,
1,0,0,0,0,8,0,9,0,0,0,0,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,
1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,
6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,9,0,0,0,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
}; /*定义整型变量并初始化*/
FILE *fp; /*定义文件指针*/
fp=fopen("test.dat", "w"); /*建立一个文字文件只写*/
//fputs("Your score of TOEFLis", fp);/*向所建文件写入一串字符*/
//fputc(':', fp);
for (i=0;i<20;i++)
{ for (m=0;m<40;m++) /*向所建文件写冒号:*/
fprintf(fp, "%d\n", apath[i][m]); /*向所建文件写一整型数*/
// fprintf(fp, "%d\n", m);
}
// fprintf(fp, "%s", s); /*向所建文件写一字符串*/
fclose(fp); /*关闭文件*/
}
'注:汉字,,需要hz16字库支持!!!hz16文件要放在同主文件一相目录中 hz16文件即字库文件,http://www.liaobei.com/有!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -