求助!急求帮助!关于C程序插入图片
式微 2012-05-21 07:52:11 去年刚开始学C程序设计,现在把基本概念学完了,老师布置了一个综合习题:编写俄罗斯方块代码。
分成三部分进行。下面是我的第一部分:左边文字说明和右边方块预览。
我主要求助三点,希望有牛人能帮我解答。
1.为什么方块预览越到后面方块间间隔越大。(如图所示)
2.怎样才能在(520.180)的位置插入“score.png”的图片?我试了,运行未果,图片没有出来。(图片在程序同一级文件夹p里)
3.就是在画方块那里,如果我把颜色(如RED,BLUE等用图片代替,怎么实现?我直接输了“p\\1.bmp”),g_Block.color的类型又不符。
这几点一直困扰我编不下去,望高手指点。
//引用图片,分级分区域
#include <graphics.h>
#include <conio.h>
#include <time.h>
//定义每个方块旋转后四个面和该方块固定颜色
struct block
{
WORD dir[4]; //方向
COLORREF color;
}g_Blocks[7]={{0xf000,0x8888,0xf000,0x8888,BLUE},{0xcc00,0xcc00,0xcc00,0xcc00,RED},
{0xe400,0x4c40,0x4e00,0x8c80,YELLOW},{0x88c0,0xe800,0xc440,0x2e00,GREEN},
{0x44c0,0x8e00,0xc880,0xe200,MAGENTA},{0xc600,0x4c80,0xc600,0x4c80,LIGHTGRAY},
{0x6c00,0x8c40,0x6c00,0x8c40,WHITE}};
//表示一个方块
struct Block
{
int x;
int y;
unsigned int id; //哪个类型的方块
unsigned int dir; //该方块的哪种形态
}nowblock,nextblock; //画方块
void DrawBlock()
{
WORD b,c;
int i,j;
nextblock.id=rand()%7;
nextblock.dir=rand()%4;
nextblock.x=530;
nextblock.y=90;
b=g_Blocks[nextblock.id].dir[nextblock.dir];
c=0x8000;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(b&c)
{
setfillstyle(g_Blocks[nextblock.id].color);
bar(nextblock.x+22*i,nextblock.y+22*j,nextblock.x+20*(i+1),nextblock.y+20*(j+1));
}
c>>=1;
}
}
} //初始化界面
void Init()
{
initgraph(640,480);
rectangle(20,20,170,170);
rectangle(180,-1,460,455);
rectangle(475,50,635,200);
rectangle(20,180,170,455);
rectangle(475,230,635,300);
} //左边文字说明
void text_left()
{
RECT r_help= {20,20,170,70};
RECT r_left= {20,20,170,125};
RECT r_right= {20,20,170,155};
RECT r_down= {20,20,170,185};
RECT r_up= {20,20,170,215};
drawtext("游戏按键帮助:",&r_help,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("左移:←",&r_left,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("右移:→",&r_right,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("加速:↓",&r_down,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("旋转:↑",&r_up,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
RECT t1= {20,180,170,260};
RECT t2= {20,180,170,300};
RECT t3= {20,180,170,340};
RECT t4= {20,300,120,490};
RECT t5= {20,330,170,520};
drawtext("消除一行得10分",&t1,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("消除两行得30分",&t2,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("消除三行得40分",&t3,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("制作人:",&t4,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("ZMQ",&t5,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
} int main()
{
srand(time(NULL));
IMAGE img;
Init();
text_left();
DrawBlock();
loadimage(&img,"p\\score.png");
putimage(0,0,&img);
getch();
closegraph();
return 0;
}