小白求解。关于c++图像填充和刷新的

c罗战伊布 2014-08-04 08:33:56
在做俄罗斯方块。是这样子的。我简单说一下思路(具体代码很挫很烦)
就是一个地图是由 一个2维数组 ditu[][]构造。

用位图画格子
Bitmap ^bmp=gcnew Bitmap(pictureBox2->Width,pictureBox2->Height);
pictureBox2->Image=bmp;
Graphics^g=Graphics::FromImage(bmp);
int i;
for(i=0;i<=180;i+=15)
g->DrawLine(Pens::Black,15,50+i,165,50+i);
for(i=0;i<165;i+=15)
g->DrawLine(Pens::Black,15+i,50,15+i,230);//画俄罗斯方块的格子,行12,列10


然后就用颜色填充表示。ditu[][]数组我初始化为全为0;
一旦数组值为1,就颜色填充。譬如在计时器中。我这样写


for(int i=5;i<17;i++)
{for(int j=0;j<=9;j++)
{if(ditu[i][j]==1)

g->FillRectangle(red,RectangleF(15+15*j,50+(i-5)*15,15,15));

if(ditu[i][j]==2)
g->FillRectangle(blue,RectangleF(15+15*j,50+(i-5)*15,15,15));

}

但是。。这样有一个很严重的问题。就是现在涂红的方格。即使我有一个函数在计时器中将方块上一格方格改为0,方块下落1格改为1,运行后也只是新的地方涂上红色,旧的地方的红色没有变成原来的无色。。这样的话怎么办。。

...全文
262 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
c罗战伊布 2014-08-04
  • 打赏
  • 举报
回复
谢谢大婶。小白大概有了一个新的,好像可以偷工减料的方式。先回去钻研一下
c罗战伊布 2014-08-04
  • 打赏
  • 举报
回复
那应该怎么使用底色填充呢~就是窗体本身那种颜色
勤奋的小游侠 2014-08-04
  • 打赏
  • 举报
回复
你这个代码那里有写0时清空的?你没有用底色填回来当然不会自动变回来了
c罗战伊布 2014-08-04
  • 打赏
  • 举报
回复
是这样。我放在form1.h这里。 首先是位图画方格我是放在paint这里。 然后计时器有一个下落的函数。大意就是将数组现在为1 的方块改成0;然后下落一格的方块改成1. 然后加上填充的函数 for(int i=5;i<17;i++) {for(int j=0;j<=9;j++) {if(ditu[i][j]==1) g->FillRectangle(red,RectangleF(15+15*j,50+(i-5)*15,15,15)); if(ditu[i][j]==2) g->FillRectangle(blue,RectangleF(15+15*j,50+(i-5)*15,15,15)); } 这样的话下一个确实填充了。但是上一格之前填充的还在啊。。。
勤奋的小游侠 2014-08-04
  • 打赏
  • 举报
回复
你这段代码放在哪里?放在onpaint里吗?
c罗战伊布 2014-08-04
  • 打赏
  • 举报
回复
或者说,我想这样子问各位大神。。 就是。地图由数组ditu[][]组成。 我的想法是。。。ditu[i][j]为0的时候,显示在窗体的是无色。 为1时,显示在窗体的是和i,j有关的一个坐标的图像填充。 为2时,显示在窗体的是和i,j有关的一个坐标的图像填充。 而且这个图像的变化要伴随着ditu[][]数组内每个值的变化而变化。。 我用的是vs2010。。 有什么方法可以实现这样的变化吗。小白跪谢了。。

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧