howzyao 发表于 2020-4-20 18:56:09

001--- c语言小游戏简易编码 内存概念

本帖最后由 howzyao 于 2020-4-20 20:24 编辑

流览c\c++版块有几天了,我看过大家发的关于内存方面的知识,对此触动很大,
我也是新手,认识有限,现将自己摸索到的已知的学习成果发给大家批评指正,
以供大家一起学习.希望借以有图为证的输出,来表达内存中的数据到底是个什么概念,
后续再编辑,想到什么再说...
话不多说,图先上:


howzyao 发表于 2020-4-20 18:57:05

本帖最后由 howzyao 于 2020-4-20 19:38 编辑

学习附件,我也放上,大家可以使用.



使用了头文件后,还需要在"链接器设置" 中,写入以下参数:
-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32

howzyao 发表于 2020-4-20 19:13:08


可以解压后试玩.欢迎拍砖,共同学习.

howzyao 发表于 2020-4-20 19:15:53



大家看看效果{:10_257:}

howzyao 发表于 2020-4-20 19:35:51

操作说明:

howzyao 发表于 2020-4-20 19:50:31

#include <cstdlib>
#include <iostream>
#include <graphics.h>
using namespace std;
void usage()
{
    int x = textheight("1")+100;
    int y = textwidth ("1")+20;
    //void settextstyle(int font, int direction, int charsize);
   
    settextstyle(0,0,0);
    setcolor(LIGHTGREEN);
    outtextxy(x,y,"吃到红块    按左键打字弹");
    outtextxy(x,y*2,"吃到黄块    减短拍子");
    outtextxy(x,y*3,"吃到蓝块    加长拍子");
    outtextxy(x,y*4,"吃到绿块    拍子粘球,右键再次发球");
    outtextxy(x,y*5,"吃到蓝块    球数翻倍 (初始化不发射有bug)");
    outtextxy(x,y*7,"规则球不能掉到屏幕下方去 但这在测试");
    outtextxy(x,y*8,"依靠鼠标在游戏窗口中左右来控制拍子来回移动 右键发球");
    outtextxy(x,y*9,"--- 按任意键开始---2020.04.20");
    setcolor(WHITE);
    getch();
}
class o
{
    int *p,size,left,top,l,w,c;
    public:
    o():p(NULL),size(0),left(0),top(0),l(0),w(0),c(0){};
   ~o(){ delete [] p; };
   
    o(char,char);
    o(char,char,char);
   
    o(const o&);
    void operator =(const o&);
   
    bool init(int,int);
};

class e
{
    o *p;
    int total,*statu;
    char *name;
    public:
    e():p(NULL),total(0),name("none"),statu(0){};
   ~e(){ delete [] p,statu; };
   
    e(int,o&o,char*);
   
};
e:: e(int sum,o&oi,char*n):total(sum),name(n)
{
    p = new o [ sum ];
   
    statu=new int ;
   
    for(int i=0;i<sum;i++)
    {
      p = oi;
      statu=0;
    }
   
   
    outtextxy(0,10,"测试摆出");
   
    for(int i=0;i<sum;i++)
    {
      if(p.init(i*12,100))
      {
            cout<<name<<" "<<i<<" 已初始化完成 statu="<<statu<<endl;
      }
    }
   
    cout<<name<<" "<<sum<<" 已初始化完成"<<endl;
}




int main(int argc, char *argv[])
{
    initwindow(800,600,"OO图形化教程",600,100);
   
    o ball(5,WHITE);
//    o b(ball);
//    o c;
//    c=ball;
//   
//    o block(50,22,2);
//    o bl(block);
//    o blo;
//    blo = block;
//   
//    ball.init(200,100);
//    b.init(200,120);
//    c.init(200,140);
//   
//    block.init(300,100);
//    bl.init(300,200);
//    blo.init(300,300);
   
    e a(5,ball,"balls");
   
   
   
   
    getch();
    //system("PAUSE");
    return EXIT_SUCCESS;
}







/*







*/
o:: o(char r,char C):left(0),top(0),l(r+r),w(r+r),c(C)
{
    setcolor(c);
    circle(r,r,r);
    setfillstyle(1,c);
    floodfill(r,r,c);
    size=imagesize(left,top,left+l,top+w);
    p = new int ;
    getimage(left,top,l,w,p);
    cleardevice();
    setcolor(WHITE);
}
o:: o(char L,char W,char c):left(0),top(0),l(L),w(W),c(c)
{
    setcolor(c);
    rectangle(left,top,l,w);
    setfillstyle(1,c);
    floodfill(1,1,c);
    size=imagesize(left,top,left+l,top+w);
    p = new int ;
    getimage(left,top,l,w,p);
    getch();
    cleardevice();
    setcolor(WHITE);
}
o:: o(const o&o):size(o.size),left(o.left),top(o.top),l(o.l),w(o.w),c(o.c)
{
    delete [] p;
    p = new int ;
   
    memcpy(p,o.p,size);
   
    cout<<"复制 内存大小: "<<size<<"\n原地址: "<<o.p
    <<"\n新地址: "<<p<<endl<<endl;
}
void o:: operator =(const o&o)
{
    delete [] p;
    size = o.size;
    left = o.left;
    top= o.top;
    l    = o.l;
    w    = o.w;
    c    = o.c;
   
    p    = new int ;
   
    memcpy(p,o.p,size);
   
    cout<<"赋值 内存大小: "<<size<<"\n原地址: "<<o.p
    <<"\n新地址: "<<p<<endl<<endl;
}
bool o:: init(int x, int y)
{
    left = x;
    top= y;
    putimage(left,top,p,1);
    cout<< p<<endl;
    return true;
}
/*







*/
页: [1]
查看完整版本: 001--- c语言小游戏简易编码 内存概念