hjj1123 发表于 2006-11-13 13:56

自己写的俄罗斯方块

<P>好久没来了,现在做单片机去了.也把以前老想做的俄罗斯方块弄完了.弄出来大家看看,有什么意见建议尽管说.<br>第一次传的时候没有把EGAVGA.BGI放进去就不能运行.现在有了可以运行了.斑竹重新下吧.<br><br></P>[attach]13801[/attach]<br>
[align=right][color=#000066][此贴子已经被作者于2006-11-14 17:08:23编辑过][/color][/align]

hjj1123 发表于 2006-11-13 13:57

附件呢?

一笔苍穹 发表于 2006-11-13 14:01

东东呢?

hjj1123 发表于 2006-11-13 14:29

我明明把附件弄上去了啊!

hjj1123 发表于 2006-11-13 14:29

再弄过.

hjj1123 发表于 2006-11-13 14:31

忘了上传.[em03]
[align=right][color=#000066][此贴子已经被作者于2006-11-13 14:31:25编辑过][/color][/align]

hjj1123 发表于 2006-11-14 15:58

<P>第一次忘了考.BGI.大家要看的话下后一个.太冷了.</P>

一笔苍穹 发表于 2006-11-14 16:09

呵呵

hjj1123 发表于 2006-11-14 16:10

[IMG]C:\Documents and Settings\Administrator\桌面\俄罗斯方快\到顶是的画面.bmp[/IMG][IMG]C:\Documents and Settings\Administrator\桌面\俄罗斯方快\刚开始.bmp[/IMG]

hjj1123 发表于 2006-11-14 16:11

[IMG]C:\Documents and Settings\Administrator\桌面\俄罗斯方快\运行中.bmp[/IMG]

hjj1123 发表于 2006-11-14 16:12

[IMG]C:\Documents and Settings\Administrator\桌面\俄罗斯方快\到顶是的画面.bmp[/IMG]

hjj1123 发表于 2006-11-14 16:13

[IMG]C:\Documents and Settings\Administrator\桌面\俄罗斯方快\再次玩的画面.bmp[/IMG]

hjj1123 发表于 2006-11-14 16:14

<P>斑竹看过没有?有什么建议?</P>
[align=right][color=#000066][此贴子已经被作者于2006-11-14 16:15:10编辑过][/color][/align]

一笔苍穹 发表于 2006-11-14 16:22

我只看了截图,因为无法进入游戏。

hjj1123 发表于 2006-11-14 17:01

<P>你重新下后面的那一个啊.</P>郁闷,图被删了.
[align=right][color=#000066][此贴子已经被作者于2006-11-14 17:01:52编辑过][/color][/align]

一笔苍穹 发表于 2006-11-14 17:02

是下的后面那个,有BGI有那个

hjj1123 发表于 2006-11-14 17:12

<P>斑竹能不能把让jig把五子棋的算法给我一下或者放论坛里面?我很感兴趣.<a href="mailto:hjj1123@sina.com" target="_blank" >hjj1123@sina.com</A></P>

一笔苍穹 发表于 2006-11-14 17:15

JIG晚上应该会来论坛,你可以等他的回复。

hjj1123 发表于 2006-11-14 17:17

<P>算了我把原代码贴上来得了.你那去编译下,用TC.<br>如果有人转贴请写上作者和出处.<br>#include&lt;stdio.h&gt;<br>#include&lt;stdlib.h&gt;<br>#include&lt;conio.h&gt;<br>#include&lt;time.h&gt;<br>#include&lt;dos.h&gt;<br>#include&lt;graphics.h&gt;<br>#define INDEX 10<br>#define COLOR 2<br>unsigned int i,j;<br>unsigned int b[4][4];<br>unsigned int xiao[4];<br>unsigned int i,j,m;<br>unsigned int q,c[8];<br>struct data{ int a[4][4];}k[5]={{1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0},<br>                    {0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0},<br>                    {0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0},<br>                    {1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},<br>                    {1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0}<br>                    };<br>void welcome()<br>{    unsigned  int i,j;<br>    clrscr();<br>    textmode(C40);<br>    for(i=0;i&lt;40;i++)<br>    printf("*");<br>    for(j=1;j&lt;24;j++)<br>    {    printf("*");<br>        gotoxy(40,j);<br>        printf("*");<br>    }<br>    for(i=0;i&lt;40;i++)<br>    printf("*");<br>    gotoxy(10,8);<br>    textcolor(RED);<br>    cprintf("WELCOME !");<br>    gotoxy(15,15);<br>    textcolor(YELLOW);<br>    cprintf("made by HJJ ");<br>    gotoxy(15,16);<br>    cprintf("2006-11-11");<br>    gotoxy(5,20);<br>    textcolor(GREEN);<br>    cprintf("press any key to continue !");<br>    getch();<br>}<br>void mydelay(int clicks)<br>{    unsigned int now=*(unsigned int far *)0x0000046c;<br>    while(abs(*(unsigned int far *)0x0000046c-now)&lt;clicks)<br>    {    }<br>}<br>void minidraw(int x,int y,int index,int color)<br>{    setcolor(color);<br>    setlinestyle(SOLID_LINE,0,1);<br>    line(x,y,x+index,y);<br>    line(x+index,y,x+index,y+index);<br>    line(x+index,y+index,x,y+index);<br>    line(x,y+index,x,y);<br>}<br>void draw(int x,int y,int index,int color)<br>{    minidraw(x,y,index,color);<br>    minidraw(x+1,y+1,index-2,color);<br>    minidraw(x+2,y+2,index-4,color);<br>}<br>void drawall(int x,int y,int index,int color)<br>{    unsigned int r,s;<br>    for(r=0;r&lt;4;r++)<br>    for(s=0;s&lt;4;s++)<br>    if(b[r][s]==1)  draw(x+s*INDEX,y+r*INDEX,index,color);<br>}<br>int mygetimage(int x,int y,int index,char *filename)<br>{    unsigned long size;<br>    char *buffer;<br>    FILE *fp;<br>    size=(unsigned long)imagesize(0,0,4*index,4*index);<br>    fp=fopen(filename,"wb") ;<br>    if(fp==NULL) {  fclose(fp);<br>            printf("file open failled !");<br>            exit(0);<br>             }<br>    buffer=(char *)malloc(size);<br>    if(buffer==NULL) return 0;<br>    getimage(x,y,x+4*index,y+4*index,buffer);<br>    fwrite(buffer,size,1,fp);<br>    free(buffer);<br>    fclose(fp);<br>    return(1);<br>}<br>void myputimage(int x,int y,char *filename)<br>{       FILE *fp;<br>    char *buffer;<br>    unsigned long size=imagesize(0,0,4*INDEX,4*INDEX);<br>    fp=fopen(filename,"rb");<br>    if(fp==NULL) {  fclose(fp);<br>            printf("open file failled !");<br>            exit(0);<br>             }<br>    buffer=(char *)malloc(size) ;<br>    fread(buffer,size,1,fp);<br>    putimage(x,y,buffer,XOR_PUT);<br>    free(buffer);<br>    fclose(fp);<br>}<br>void converting()<br>{    unsigned int r,s;<br>    for(r=0;r&lt;4;r++)<br>    for(s=0;s&lt;4;s++)<br>    b[r][s]=k[m].a[r][s];<br>}<br>void initial()<br>{    unsigned int gdriver=ATT400,gmode=ATT400C3;<br>    registerbgidriver(EGAVGA_driver);<br>    initgraph(&amp;gdriver,&amp;gmode,"");<br>    cleardevice();<br>    line(100,10,250,10);<br>    line(250,10,250,170);<br>    line(250,170,100,170);<br>    line(100,170,100,10);<br>    line(200,10,200,170);<br>    i=130;<br>    j=10;<br>    m=randmake();<br>    converting();<br>    drawall(205,15,INDEX-1,COLOR);<br>    mygetimage(205,15,INDEX,"picture.dat");<br>}<br>int getkey()<br>{    union REGS rg;<br>    rg.h.ah=0;<br>    int86(0x16,&amp;rg,&amp;rg);<br>    return rg.x.ax;<br>}<br>int checktop()<br>{    if(checktopmini()&lt;=10+ymini()*INDEX) return 0;<br>    return 1;<br>}<br>int checktopmini()<br>{    int r,s,mini=160,flagx=0;<br>    for(s=170;s&gt;0;s-=INDEX)<br>    {    for(r=100;r&lt;201;r+=INDEX)<br>        if(getpixel(r,s-1)==COLOR)<br>        {    if(s&lt;=mini)    mini=s;<br>                        r=201;<br>                        flagx=1;<br>        }<br>        if(flagx==0) s=10;<br>    }<br>    return mini;<br>}<br>int checkdown(unsigned int y1)<br>{    unsigned int r,s,x1;<br>    x1=i;<br>    for(r=0;r&lt;4;r++)<br>    for(s=0;s&lt;4;s++)<br>    if(b[r][s]==1&amp;&amp;(b[r+1][s]==0||r==3))<br>    if(getpixel(x1+s*INDEX+1,y1+(r+1)*INDEX+2)==COLOR)<br>    return 0;<br>    return 1;<br>}<br>int checknow()<br>{    unsigned int r,s;<br>    for(r=0;r&lt;4;r++)<br>    for(s=0;s&lt;4;s++)<br>    if(b[r][s]==1&amp;&amp;(b[r+1][s]==0||r==3))<br>    if(getpixel(i+s*INDEX+1,j+r*INDEX+2)==COLOR)<br>    return 0;<br>    return 1;<br>}<br>int checkfull()<br>{    int r,s,flag;<br>    int o=0;<br>    for(s=10;s&lt;170;s+=INDEX)<br>    {       flag=1;<br>        for(r=100;r&lt;200;r+=INDEX)<br>        if(getpixel(r+1,s+2)!=COLOR)<br>        {    flag=0;<br>            r=190;<br>        }<br>        if(flag==1) xiao[o++]=s;<br>    }<br>    return o;<br>}<br>void inexistence()<br>{    int p,t;<br>    char *buffer;<br>    unsigned int size=imagesize(101,10,199,19);<br>    buffer=(char *)malloc(size);<br>    if(buffer==NULL) {    free(buffer);<br>                printf("malloc failed !");<br>                exit(0);<br>            }<br>    for(p=0;p&lt;4;p++)<br>    {    if(xiao[p]&gt;0)<br>        {    getimage(101,xiao[p],199,xiao[p]+9,buffer);<br>            putimage(101,xiao[p],buffer,XOR_PUT);<br>            for(t=xiao[p]-10;t&gt;10;t-=INDEX)<br>            {    getimage(101,t,199,t+INDEX-1,buffer);<br>                putimage(101,t,buffer,XOR_PUT);<br>                putimage(101,t+INDEX,buffer,COPY_PUT);<br>            }<br>            xiao[p]=0;<br>        }<br>    }<br>    free(buffer);<br>}<br>void rightmove()<br>{    int r,s,xm;<br>    int flag=1;<br>    xm=xmini();<br>    for(r=0;r&lt;4;r++)<br>    for(s=0;s&lt;4;s++)<br>    if(b[r][s]==1&amp;&amp;(s==3||b[r][s+1]==0))<br>    if(getpixel(i+(s+1)*INDEX+2,j+r*INDEX+2)==COLOR) flag=0;<br>    if(flag==1&amp;&amp;i&lt;200-xm*INDEX)<br>    {    myputimage(i,j,"picture.dat");<br>        i+=INDEX;<br>        myputimage(i,j,"picture.dat");<br>    }<br>}<br>void leftmove()<br>{    int r,s;<br>    int flag=1;<br>    for(r=0;r&lt;4;r++)<br>    for(s=0;s&lt;4;s++)<br>    if(b[r][s]==1&amp;&amp;(s==0||b[r][s-1]==0))<br>    if(getpixel(i+s*INDEX-2,j+r*INDEX+2)==COLOR) flag=0;<br>    if(flag==1&amp;&amp;i&gt;100)<br>    {    myputimage(i,j,"picture.dat");<br>        i-=INDEX;<br>        myputimage(i,j,"picture.dat");<br>    }<br>}<br>int fastmove()<br>{<br>    unsigned int x,y;<br>    x=i;<br>    y=j;<br>    while(checkdown(y)&amp;&amp;y&lt;160-ymini()*INDEX)<br>    y+=INDEX;<br>    myputimage(i,j,"picture.dat");<br>    myputimage(x,y,"picture.dat");<br>    j=y;<br>}<br>int ymini()<br>{    int r,s,mini=0;<br>    for(r=0;r&lt;4;r++)<br>    {    for(s=0;s&lt;4;s++)<br>        if(b[r][s]==1)<br>        {    mini+=1;<br>            s=4;<br>        }<br>    }<br>    return mini;<br>}<br>int xmini()<br>{    int r,s,mini=0;<br>    for(r=0;r&lt;4;r++)<br>    {    for(s=0;s&lt;4;s++)<br>        if(b[s][r]==1)<br>        {    mini+=1;<br>            break;<br>        }<br>    }<br>    return mini;<br>}<br>int randmake()<br>{    unsigned int m;<br>    srand((unsigned)time(NULL));<br>    m=rand()%5;<br>    return m;<br>}<br>void endmanage()<br>{    myputimage(205,15,"picture.dat");<br>    j=10;<br>    i=130;<br>    m=randmake();<br>    converting();<br>    drawall(205,15,INDEX-1,COLOR);<br>    mygetimage(205,15,INDEX,"picture.dat");<br>    mygetimage(205,15,INDEX,"picture1.dat");<br>    if(checkfull())    inexistence();<br>}<br>void fall()<br>{    unsigned int clock=4;<br>    unsigned char *adress;<br>    myputimage(i,j,"picture.dat");<br>    myputimage(i,j+INDEX,"picture.dat");<br>    j+=INDEX;<br>    while(clock--)<br>    {    if(bioskey(1)==0) mydelay(2);<br>        else return;<br>    }<br>}<br>unsigned int checkmove()<br>{    if(checknow())<br>    {    if(j&lt;checktopmini()-xmini()*INDEX&amp;&amp;i&lt;200-ymini()*INDEX&amp;&amp;i&gt;99)<br>        return 0;<br>    }<br>    return 1;<br>}<br>void move()<br>{    unsigned int r,s;<br>    unsigned int h=0;<br>    float co,si;<br>    for(r=0;r&lt;4;r++)<br>    for(s=0;s&lt;4;s++)<br>    if(b[r][s]==1)<br>    {<br>        c[h++]=s;<br>        c[h++]=r;<br>        b[r][s]=0;<br>    }<br>    b[c[0]][c[1]]=1;<br>    b[c[2]][c[3]]=1;<br>    b[c[4]][c[5]]=1;<br>    b[c[6]][c[7]]=1;<br>    myputimage(i,j,"picture.dat");<br>    myputimage(205,15,"picture.dat");<br>    if(checkmove()) converting();<br>    drawall(205,15,INDEX-1,COLOR);<br>    mygetimage(205,15,INDEX,"picture.dat");<br>    myputimage(i,j,"picture.dat");<br>}<br>void main()<br>{    unsigned char p;<br>    welcome();<br>    loop:initial();<br>    do<br>    {    if(checknow(j)&gt;0) myputimage(i,j,"picture.dat");<br>        while(checkdown(j)&gt;0&amp;&amp;j&lt;161-ymini()*INDEX)<br>        {    if(bioskey(1)==0)    fall();<br>            else {    q=getkey();<br>                    switch(q)<br>                    {    case 0x4b00: leftmove();break;<br>                        case 0x4800: move();break;<br>                        case 0x4d00: rightmove();break;<br>                        case 0x5000: fastmove(i,j);<br>                    }<br>                }<br>        }<br>        endmanage();<br>    }while(checktop());<br>    getch();<br>    cleardevice();<br>    printf("if you want to paly the game another time,input 'y'");<br>    p=bioskey(0);<br>    if(p=='y')  goto loop;<br>    getch();<br>    closegraph();<br>}</P><br>非常抱歉没有写注释,我也知道这样不大好,但是懒得去写,等那天我没事的时候补上.
[align=right][color=#000066][此贴子已经被作者于2006-11-14 19:51:18编辑过][/color][/align]

hjj1123 发表于 2006-11-14 17:22

与有些不同,我没有采用数组去查询是否有方块,而取那个点的颜色值的.最前面的数组是控制方块的,0表示没有方块,1表示有.是4*4的数组.晚上上课去了.斑竹麻烦一下.
[align=right][color=#000066][此贴子已经被作者于2006-11-14 17:23:37编辑过][/color][/align]


页: [1] 2

编程论坛