| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2306 人关注过本帖
标题:[求助]关于getimage和putimage
只看楼主 加入收藏
w5941120
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2006-4-16
收藏
 问题点数:0 回复次数:13 
[求助]关于getimage和putimage

这是我有问题的地方:
QiPan()/*棋盘上的各种图案*/
{
int size;
size=imagesize(11,11,20,20);
Qzz=(void *)malloc(size);
Lzz=(void *)malloc(size);
Rzz=(void *)malloc(size);
Xzz=(void *)malloc(size);
Dzz=(void *)malloc(size);
Mzz=(void *)malloc(size);

setfillstyle(5,6);/*墙*/
setcolor(WHITE);
rectangle(11,11,20,20);
floodfill(15,15,WHITE);
/*Qzz=(void *)malloc(size);*/
/*getimage(11,11,20,20,Qzz);*/

setfillstyle(1,WHITE);/*路*/
rectangle(21,11,30,20);
floodfill(25,15,WHITE);
/*Lzz=(void *)malloc(size);*/
/*getimage(21,11,30,20,Lzz);*/

rectangle(31,11,40,20);/*人*/
line(34,13,38,13);
line(36,12,36,15);
line(36,15,34,18);
line(36,15,38,18);
/*Rzz=(void *)malloc(size);*/
/*getimage(31,11,40,20,Rzz);*/

rectangle(41,11,50,20);/*箱子*/
setfillstyle(1,GREEN);
line(41,11,50,20);
line(41,20,50,11);
floodfill(42,15,WHITE);
floodfill(49,17,WHITE);
floodfill(46,12,WHITE);
floodfill(46,19,WHITE);
/*Xzz=(void *)malloc(size);*/
/*getimage(41,11,50,20,Xzz);*/

rectangle(51,11,60,20);/*到达目的地的箱子*/
setfillstyle(1,LIGHTRED);
line(51,11,60,20);
line(51,20,60,11);
floodfill(52,15,WHITE);
floodfill(59,17,WHITE);
floodfill(56,12,WHITE);
floodfill(56,19,WHITE);
/*Dzz=(void *)malloc(size);*/
/*getimage(51,11,60,20,Dzz);*/

rectangle(61,11,70,20);/*目的地*/
setfillstyle(1,LIGHTRED);
circle(65,15,4);
floodfill(65,15,WHITE);
/*Mzz=(void *)malloc(size);*/

getimage(11,11,20,20,Qzz);
getimage(21,11,30,20,Lzz);
getimage(31,11,40,20,Rzz);
getimage(41,11,50,20,Xzz);
getimage(51,11,60,20,Dzz);
getimage(61,11,70,20,Mzz);
cleardevice();
}
这些VOID指针声明了全局变量的,这时我应该已经把这几个不同的图都存在不同的内存处了吧,然后我再从文件中读出相关数据,就是下面的字符型的'1','2','3','4','5'......

DrawQM()
{
int i, j, m, n;
cleardevice();
setbkcolor(LIGHTGRAY);
/*setviewport(100,0,300,200,0);*/
QiPan();
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
{
m=10*j+1; n=10*i+1;
if(QM[i][j]=='1') putimage(m,n,Lzz,COPY_PUT);
if(QM[i][j]=='2') putimage(m,n,Xzz,COPY_PUT);
if(QM[i][j]=='3') putimage(m,n,Qzz,COPY_PUT);
if(QM[i][j]=='4') putimage(m,n,Mzz,COPY_PUT);
if(QM[i][j]=='5') putimage(m,n,Rzz,COPY_PUT);
if(QM[i][j]=='6') putimage(m,n,Dzz,COPY_PUT);
}
}
}

数据中'1'--'6'都有且只有1个,这时应该在屏幕上显示我之前存在内存中的不同的图形啊,但是我运行后怎么只有一种图形?就只有我最后画的那个"目的地"的图形!难道是我画了一个存了,再画一个保存的时候就把前一个图给覆盖了?

搜索更多相关主题的帖子: getimage putimage 
2006-09-28 16:47
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

我运行没问题
#include <stdlib.h>
#include <time.h>
#include <graphics.h>

void *Qzz,*Lzz,*Rzz,*Xzz,*Dzz,*Mzz;
int QM[20][20];

QiPan()/*棋盘上的各种图案*/
{
int size;
size=imagesize(11,11,20,20);
Qzz=(void *)malloc(size);
Lzz=(void *)malloc(size);
Rzz=(void *)malloc(size);
Xzz=(void *)malloc(size);
Dzz=(void *)malloc(size);
Mzz=(void *)malloc(size);

setfillstyle(5,6);/*墙*/
setcolor(WHITE);
rectangle(11,11,20,20);
floodfill(15,15,WHITE);
/*Qzz=(void *)malloc(size);*/
/*getimage(11,11,20,20,Qzz);*/

setfillstyle(1,WHITE);/*路*/
rectangle(21,11,30,20);
floodfill(25,15,WHITE);
/*Lzz=(void *)malloc(size);*/
/*getimage(21,11,30,20,Lzz);*/

rectangle(31,11,40,20);/*人*/
line(34,13,38,13);
line(36,12,36,15);
line(36,15,34,18);
line(36,15,38,18);
/*Rzz=(void *)malloc(size);*/
/*getimage(31,11,40,20,Rzz);*/

rectangle(41,11,50,20);/*箱子*/
setfillstyle(1,GREEN);
line(41,11,50,20);
line(41,20,50,11);
floodfill(42,15,WHITE);
floodfill(49,17,WHITE);
floodfill(46,12,WHITE);
floodfill(46,19,WHITE);
/*Xzz=(void *)malloc(size);*/
/*getimage(41,11,50,20,Xzz);*/

rectangle(51,11,60,20);/*到达目的地的箱子*/
setfillstyle(1,LIGHTRED);
line(51,11,60,20);
line(51,20,60,11);
floodfill(52,15,WHITE);
floodfill(59,17,WHITE);
floodfill(56,12,WHITE);
floodfill(56,19,WHITE);
/*Dzz=(void *)malloc(size);*/
/*getimage(51,11,60,20,Dzz);*/

rectangle(61,11,70,20);/*目的地*/
setfillstyle(1,LIGHTRED);
circle(65,15,4);
floodfill(65,15,WHITE);
/*Mzz=(void *)malloc(size);*/

getimage(11,11,20,20,Qzz);
getimage(21,11,30,20,Lzz);
getimage(31,11,40,20,Rzz);
getimage(41,11,50,20,Xzz);
getimage(51,11,60,20,Dzz);
getimage(61,11,70,20,Mzz);
cleardevice();
}

DrawQM()
{
int i, j, m, n;
cleardevice();
setbkcolor(LIGHTGRAY);
/*setviewport(100,0,300,200,0);*/
QiPan();
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
{
m=10*j+1; n=10*i+1;
if(QM[i][j]=='1') putimage(m,n,Lzz,COPY_PUT);
if(QM[i][j]=='2') putimage(m,n,Xzz,COPY_PUT);
if(QM[i][j]=='3') putimage(m,n,Qzz,COPY_PUT);
if(QM[i][j]=='4') putimage(m,n,Mzz,COPY_PUT);
if(QM[i][j]=='5') putimage(m,n,Rzz,COPY_PUT);
if(QM[i][j]=='6') putimage(m,n,Dzz,COPY_PUT);
}
}
}

main()
{
int gdriver=DETECT,gmode=0;
int i,j;
initgraph(&gdriver,&gmode,"");
srand((unsigned)time(NULL));
for(i=0;i<20;i++)
for(j=0;j<20;j++)
QM[i][j]=random(6)+'1';
DrawQM();
getch();
}

应该是你其他地方出了问题
下次再问这种东西的时候最好把能运行的问题程序发上来
不要只发一段代码

2006-09-28 17:12
w5941120
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2006-4-16
收藏
得分:0 

/*推箱子,1表示空白的路,2表示箱子,3表示墙,4表示目的地,5表示人,6表示到达目的地的箱子*/
/*0是墙以外的空白*/
#include<graphics.h>
#include<string.h>
#include<stdio.h>

void *Qzz, *Lzz, *Rzz, *Xzz, *Mzz, *Dzz;/*墙,路,人,箱子,目的地,到达的目的地的图形指针*/
char QM[20][20];

QiPan()/*棋盘上的各种图案*/
{
int size;
size=imagesize(11,11,20,20);
Qzz=(void *)malloc(size);
Lzz=(void *)malloc(size);
Rzz=(void *)malloc(size);
Xzz=(void *)malloc(size);
Dzz=(void *)malloc(size);
Mzz=(void *)malloc(size);

setfillstyle(5,6);/*墙*/
setcolor(WHITE);
rectangle(11,11,20,20);
floodfill(15,15,WHITE);
/*Qzz=(void *)malloc(size);*/
/*getimage(11,11,20,20,Qzz);*/

setfillstyle(1,WHITE);/*路*/
rectangle(21,11,30,20);
floodfill(25,15,WHITE);
/*Lzz=(void *)malloc(size);*/
/*getimage(21,11,30,20,Lzz);*/

rectangle(31,11,40,20);/*人*/
line(34,13,38,13);
line(36,12,36,15);
line(36,15,34,18);
line(36,15,38,18);
/*Rzz=(void *)malloc(size);*/
/*getimage(31,11,40,20,Rzz);*/

rectangle(41,11,50,20);/*箱子*/
setfillstyle(1,GREEN);
line(41,11,50,20);
line(41,20,50,11);
floodfill(42,15,WHITE);
floodfill(49,17,WHITE);
floodfill(46,12,WHITE);
floodfill(46,19,WHITE);
/*Xzz=(void *)malloc(size);*/
/*getimage(41,11,50,20,Xzz);*/

rectangle(51,11,60,20);/*到达目的地的箱子*/
setfillstyle(1,LIGHTRED);
line(51,11,60,20);
line(51,20,60,11);
floodfill(52,15,WHITE);
floodfill(59,17,WHITE);
floodfill(56,12,WHITE);
floodfill(56,19,WHITE);
/*Dzz=(void *)malloc(size);*/
/*getimage(51,11,60,20,Dzz);*/

rectangle(61,11,70,20);/*目的地*/
setfillstyle(1,LIGHTRED);
circle(65,15,4);
floodfill(65,15,WHITE);
/*Mzz=(void *)malloc(size);*/

getimage(11,11,20,20,Qzz);
getimage(21,11,30,20,Lzz);
getimage(31,11,40,20,Rzz);
getimage(41,11,50,20,Xzz);
getimage(51,11,60,20,Dzz);
getimage(61,11,70,20,Mzz);
cleardevice();
}

DrawQM()
{
int i, j, m, n;
cleardevice();
setbkcolor(LIGHTGRAY);
/*setviewport(100,0,300,200,0);*/
QiPan();
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
{
m=10*j+1; n=10*i+1;
if(QM[i][j]=='1') putimage(m,n,Lzz,COPY_PUT);
if(QM[i][j]=='2') putimage(m,n,Xzz,COPY_PUT);
if(QM[i][j]=='3') putimage(m,n,Qzz,COPY_PUT);
if(QM[i][j]=='4') putimage(m,n,Mzz,COPY_PUT);
if(QM[i][j]=='5') putimage(m,n,Rzz,COPY_PUT);
if(QM[i][j]=='6') putimage(m,n,Dzz,COPY_PUT);
}
}
}

QiMian()/*得到棋面相关信息*/
{
}

Save()
{
FILE *fp; int m,i,j; char filename[10]/*, pathname[16], temp[6]={'\\','m','a','p','\\','\0'}*/;
/*strcpy(pathname,temp);*/
printf("What's the name of this file that you will save(要保存的文件名):");
scanf("%s",&filename);
printf("\n");
/*strcat(pathname,filename);*/
if((fp=fopen(filename,"w"))==NULL)
{
printf("Can't open file!\n");
exit(0);
}
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
{
/*n=48+QM[i][j];*/
fputc(QM[i][j],fp);
}
}
printf("已保存!\n");
fclose(fp);
}

Load()
{
FILE *fp; int m,i,j; char filename[10]/*, pathname[16], temp[6]={'\\','m','a','p','\\','\0'}*/;
/*strcpy(pathname,temp);*/
printf("What's the name of this file that you will load(要打开的文件名):");
scanf("%s",&filename);
printf("\n");
/*strcat(pathname,filename);*/
if((fp=fopen(filename,"r"))==NULL)
{
printf("Can't open file!\n");
exit(0);
}
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
{
QM[i][j]=fgetc(fp);
/*QM[i][j]='s'-48;*/
}
}
fclose(fp);
DrawQM();
}

CreatSys()/*保存棋面信息*/
{
int i, j, m, n, a, Flag;
for(i=0;i<20;i++)
for(j=0;j<20;j++)
QM[i][j]='0';
for(a=1;a<=6;a++)
{
printf("输入值为%d的QM行列数(以“-1 -1”结束):\n",a);
printf("(1表示空白的路,2表示箱子,3表示墙,4表示目的地,5表示人,6表示到达目的地的箱子)\n");
do
{
scanf("%d%d",&m,&n);
if(m!=-1&&n!=-1) QM[m][n]=48+a;
}while(m!=-1&&n!=-1);
printf("\n");
}
printf("要保存吗?\t0. 不保存 非0. 保存:");
scanf("%d",&Flag);
printf("\n");
if(Flag) Save();
}

main()
{
int gdriver=DETECT, gmode, Flag;
initgraph(&gdriver, &gmode, "");/*自动测试硬件*/
printf("要建棋面吗?\t0. 不建 非0. 建立:");
scanf("%d",&Flag);
if(Flag) CreatSys();
Load();
getchar();
closegraph();
}

遇到这个问题,后面的就没写了
写得很乱,呵呵,初学
我前几次运行的时候能看到运行结果中只有一种图形,刚刚又运行了一次,画面一闪就没了,应该是我后来改过了点
我显示棋面的时候是打开的一个叫"1",没后缀名的自己建的文件,其中的数据就是'1'--'6'各一个,其他全是'0';
然后就一闪,就退出程序了
麻烦高手看看,确实写得很乱,

[此贴子已经被作者于2006-9-28 17:42:23编辑过]

2006-09-28 17:40
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

你的是什么编译器啊?

2006-09-28 17:43
w5941120
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2006-4-16
收藏
得分:0 
MyTC 5.4.1
2006-09-28 17:44
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
没用过
这种东西我就用WIN-TC
2006-09-28 17:49
w5941120
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2006-4-16
收藏
得分:0 
应该差不多吧,我这个程序有什么大问题啊?
2006-09-28 17:51
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
你做的太难应用了
作个人性化强点的啊
2006-09-28 17:56
w5941120
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2006-4-16
收藏
得分:0 
才学没好久啊,就这个水平啊!
2006-09-28 18:02
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

我看不是
感觉就是闲麻烦

但是你可以用其他方法啊
例如可以利用BMP文件来存储信息

2006-09-28 18:37
快速回复:[求助]关于getimage和putimage
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.089748 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved