`
天海浪人
  • 浏览: 35576 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
社区版块
存档分类
最新评论

用c开发的游戏

阅读更多

申明:前不久选修了c语言,因为老师把用c写一个游戏作为考试题。于是我写了这个常见的俄罗斯方块,感觉良好就 写到 博客里了,见笑了。 #include #include #include #include  <stdio.h>

#include  <stdlib.h>

#include  <dos.h>

#include <conio>

#include <time.h>

#include <grapgics.h>

#define L     1

#define LX   15

#define LY    4

static struct   BLOCK{

    int  x0,y0,x1,y1,x2,y2,x3,y3;  

    int  color,next;}b[23]={{0,1,1,1,2,1,3,1,4,1},  {1,0,1,3,1,2,1,1,4,0},{1,1,2,2,1,2,2,1,1,2},

                                          {0,1,1,1,1,0,2,0,2,4},{0,0,0,1,1,2,1,1,2,3},{0,0,1,0,1,1,2,1,3,8},

                                          {1,0,1,1,2,2,2,1,2,5},{0,2,1,2,1,1,2,1,2,6},{0,1,0,2,1,1,1,0,3,9}, 

                                          {0,1,1,1,1,2,2,2,3,10},{1,1,1,2,2,1,2,0,3,7},{  1,0,1,1,1,2,2,2,7,12}, 

                                          {0,1,1,1,2,1,2,0,7,13},{0,0,1,2,1,1,1,0,7,14},{0,1,0,2,1,1,2,1,7,11},

                                          {0,2,1,2,1,1,1,0,5,16},{0,1,1,1,2,2,2,1,5,17},{1,0,1,1,1,2,2,0,5,18},

                                          {0,0,0,1,1,11,2,1,5,15},{0,1,1,1,1,0,2,1,6,2,0},{0,1,1,2,1,1,1,0,6,21},

                                          {0,1,1,2,1,1,2,1,6,22},{1,0,1,1,1,2,2,1,6,19}};

static int d[10]={33000,3000,1600,1200,900,800,600,400,300,200};

int Llevel,Lcurrent,Lnext,Lable,lx,ly,Lsum;

unsigned Lpoint;

int La[19][10],FLAG,sum;

unsigned ldelay;

void scrint(),datainit(),dispb(),eraseeb();

void throw(),judge(),delayp(),move(0,note(0,show();

int Ldrop(),Ljudge(),nextb(),routejudge();

 

main(){

            char c;

            datainit();

            Label=nextb();

            Label=Ldrop();

            while(1) {

                            delayp();

                             if(Label!=0){

                                    Ljudge();

                                    Lable=nextb();}

                                          ldelay--;

                                          if(ldelay==0){

                                             Label=Ldrop();

                                             ldelay=d[0];}

                                                             if(FLAG!=0)     break;}

                                     whlie(getch()!='\r');

                                     {

                                        goto xy(38,16);

                                         cputs("again?");

                                          c=getch();

                                      while(c!='n'&&c!='N')

                                    clscr();}

                                   int nextb(){

                                    if(La[(b[Lnext].y0)][(3+b[Lnext].x0)]!=0 ||   La[(b[Lnext].y1)][(3+b[Lnext].x1)]

                                       !=0 || La[(b[Lnext].y2)][(3+b[Lnext].x2)]!=0 || La[(b[Lnext].y3)][(3+

                                        b[Lnext].x3)]!=0){

                                            FLAG= L;

                                            return ( -1 );}

                                             eraseb(0,3,5,Lnext);

                                             Lcurrent = Lnext;

                                             lx=3;ly=0;

                                             Label=0;

                                             ldelay=d[0];

                                             Lsum ++;

                                              Lpoint += 1;

                                              Lnext=random(23);

                                              dispb(0,3,5,Lnext);

                                              textcolor(7);

                                              goto xy(3,14);cprintf("%#5d",Lsum);

                                              goto xy(3,17);cprintf("%#5d",Lpoint);

                                               return(0);  }

                                              void delayp(0{

                                              char key;

                                              if(kbhit()!=0){

                                                 key=getch();

                                                 move(key);

                                                 if(key=='\\')

                                                     getch();

                                                                   }}

                                 void move(funkey)

                                   char funkey;{

                                    int tempcode;

                                    switch( funkey){

                                       case 'k': if(lx+b[current].x0>0){

                                                     if(La[ly+(b[Lcurrent].y0)][lx-1+(b[L

current].x0)]==0&&  La[(ly+b[current].y1)][(lx-1+b[current].x10]==0 && La[ly+b[current].y2)][lx-1+b[Lcurrent].x2)]==0&&La[ly+(b[current].y3)][lx-1+(b[Lcurrent].x3)]==0){      

                           eraseb(L,lx,lyLcurrent);

                           lx--;

                            dispb(L,lx,ly,Lcurrent);}  break;

                                      case 0x20: tempcode=b[Lcurrent].next;

                                                        if (lx+b[tempcode].x0>=0&&lx+b[tempcode].x3<=9&&

                                                           ly+b[tempcode].y1<=19&&ly+b[tempcode].y2<=19)

                                                          if(routejudge()!+-1)

                                                        if(La+(b[tempcode].y0)][lx+(b[tempcode].x0)]==0&&

                                                          La[ly+(b[tempcode].y1)][lx+(b[tempcode].x1)]==0&&La[ly+(b[tempcode].y2)][lx+(b[tempcode].x2)]==0&&La[ly+(b[tempcode].y3)][lx+(b[tempcode].x3)]==0)

                                                     {

                                                         eraseb(L,lx,ly,Lcurrent);

                                                          Lcurrent=tempcode;

                                                          dispb(L,lx,ly,Lcurrent);}  break;

                                       case 'M': if(lx+b[Lcurrent].x3<9)

                                                     if(La[ly+(b[Lcurrent].y0)][lx+(b[Lcurrent].x0)]==0&&La[ly+(b[Lcurrent].y1)][lx+(b[Lcurrent].x1)]==0&&La[ly+(b[Lcurrent].y2)][lx+(b[Lcurrent].x2)]==0&&La[ly+(b[Lcurrent].y3)][lx+(b[Lcurrent].x3)]==0){

                                                                eraseb(L,lx,ly,Lcurrent);

                                                                lx++;

                                                                disb(L,lx,ly,Lcurrent);}break;

                                       case  'p': throw();break;

                                        case 0x1b: clrscr();exit(0);break;

                                        default:break;}}

                                       void throw(0{

                                                    int tempy;tempy=ly;

                                                     while(ly+b[Lcurrent].y1<19&& ly+b[current].y2<19&&La[ly+(b[Lcurrent].y0)][lx+(b[Lcurrent].x0)]==0&&La[ly+(b[Lcurrent].y1)][lx+(b[Lcurrent].x1)]==0&&La[ly+(b[Lcurrent].y2)][lx+(b[Lcurrent].x2)]==0&&La[ly+(b[Lcurrent].y3)][lx+(b[Lcurrent].x3)]==0)

                                                       ly++;ly--;

eraseb(L,lx,tempy,Lcurrent);dispb(L,lx,ly,Lcurrent);

 La[ly+b[Lcurrent].y0)][lx+(b[current].x0)]=

 La[ly+b[Lcurrent].y1)][lx+(b[current].x1)]=

 La[ly+b[Lcurrent].y2)][lx+(b[current].x2)]=

 La[ly+b[Lcurrent].y3)][lx+(b[current].x3)]=b[Lcurrent].color;

Label=-1;}

int routejudge(){

int i,j;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

if(La[ly+i][lx+j]!=0)

    return(-1);

return(1);}

int Ldrop(){

if(ly+b[Lcurrent].y1>=18||ly+b[Lcurrent].y2>=18)

{La[ly+b[Lcurrent].y0)][lx+(b[current].x0)]=

 La[ly+b[Lcurrent].y1)][lx+(b[current].x1)]=

 La[ly+b[Lcurrent].y2)][lx+(b[current].x2)]=

 La[ly+b[Lcurrent].y3)][lx+(b[current].x3)]=b[Lcurrent].color;

return(-1);}

if(La(ly+1+(b[Lcurrent].y0)][lx+(b[Lcurrent].x0)]!=0||La(ly+1+(b[Lcurrent].y1)][lx+(b[Lcurrent].x1)]!=0||La(ly+1+(b[Lcurrent].y2)][lx+(b[Lcurrent].x2)]!=0||La(ly+1+(b[Lcurrent].y3)][lx+(b[Lcurrent].x3)]!=0){La[ly+b[Lcurrent].y0)][lx+(b[current].x0)]=

 La[ly+b[Lcurrent].y1)][lx+(b[current].x1)]=

 La[ly+b[Lcurrent].y2)][lx+(b[current].x2)]=

 La[ly+b[Lcurrent].y3)][lx+(b[current].x3)]=b[Lcurrent].color;

return(-1);}

eraseb(L,lx,ly,Lcurrent);

dispb(L,lx,++ly,Lcurrent);

return(0);}

 

int Ljudge(){

int i,j,k,lines,f;

static int p[5]={0,1,3,6,10};

lines=0;

for(k=0;k<=3;k++){

f=0;if((ly+k)>18)

        continue;

for(i=0;i<10;i++)

   if(La[ly+k][i]==0);i>0;i--){

f++;break;}

if(f==0){

movetext(LX,LY,LX+19,LY+ly+k-1,LX,LY+1);

for(i=(ly+k);i>0;i--){

  for(j=0;j<10;j++)

     La[i][j]=La[i-1][j];

 for(j=0;j<10;j++)

    La[0][j]=0;

lines++;}}

Lpoint+=p[lines]*10;

return(0);}

 

void scrint(){

int i;

char lft[20];

textbackground(1);

clrscr();

gotoxy(30,9);

cputs("enter your name");

scanf("%s",lft);

gotoxy(25,14);

scanf("%s",lft);

textbackground(0);clrscr();

textcolor(15);gotoxy(17,1);

cprintf("%s",lft);

gotoxy(5,3);

cputs("next");

gotoxy(4,13);cputs("block");

gotoxy(4,16);cputs("point");

for(i=0;i<19;i++)

  {

    gotoxy(LX-2,LY+1);

cputs("**                                          **");

}gotoxy(LX-2,LY+19);cputs("**********************");

}

void datainit(){

 int i,j;

 for(i=0;i<19;i++)

    for(j=0;j<10;j++)

        La[i][j]=0;

Label=0;FLAG=0;

ldelay=d[0];Lsum=0;Lpoint=0;

randomize();

Lnext=random(23);}

void dispb(LRflag,x,y,blockcode)

int realx,realy;

if(LRflag==L)

     {realx=LX+x*2;realy=LY+y;}

else

    {realx=x,raly=y;}

textcolor(b[blockcode].color);

gotoxy(realx+2*b[blockcode].x0,realy+b[blockcode].y0);cputs("**");

gotoxy(realx+2*b[blockcode].x1,realy+b[blockcode].y1);cputs("**");

gotoxy(realx+2*b[blockcode].x2,realy+b[blockcode].y2);cputs("**");

gotoxy(realx+2*b[blockcode].x3,realy+b[blockcode].y3);cputs("**");}

void eraseb(LRflag,x,y,blockcode)

int LRflag,x,y,blockcode;

{

int realx,realy;

if(LRflag==L)

{ realx=LX+x*2;realy=LY+y;}

else

{realx=Lx+x*2;realy=LY+y;}

textcolor(0);

gotoxy(realx+2*b[blockcode].x0,realy+b[blockcode].y0);cputs("**");

gotoxy(realx+2*b[blockcode].x1,realy+b[blockcode].y1);cputs("**");

gotoxy(realx+2*b[blockcode].x2,realy+b[blockcode].y2);cputs("**");

gotoxy(realx+2*b[blockcode].x3,realy+b[blockcode].y3);cputs("**");}

}     

【冲三钻特价】清华同方通用小手柄特价销售 TF2601/

分享到:
评论
8 楼 guooscar 2009-05-06  
现在的大学怎么就不与时俱进一点呢,都2009年了还在用1987年的编译器写dos下的程序
7 楼 daiming253685 2009-05-06  
这怎么读得懂啊
6 楼 zhangzuohai 2008-11-26  
请问这是在那个编译器下编译的呀,cv or bc or other??
5 楼 xiehao315 2008-11-02  
我不会用C,提个建议,能不能多几行注释呀!
因为现在没有谁会认真去看没有一行注释而且长段长段的代码,当然,除非是自己写的,不过那也不一定。
4 楼 shzhlo 2008-09-11  
太多错误了,能不能调好了,再放上来
3 楼 kevin_ge 2008-08-29  
代码规范==代码质量
2 楼 天海浪人 2008-08-29  
现在忙着学Java,有时间了我再看看,那时候还请你多指点呀。呵呵
1 楼 sole 2008-08-27  
过了几天后,如果发现里面有个小bug,你肯定不想再去查看源码修复了。因为那是一个非常头痛的问题。
可能你首先想到以后要多写注释。但用注释还是不能解决根本问题。
没别的意思,只是提示一下要注意代码的清晰度。

相关推荐

    c语言小游戏c语言项目源码大全合集(60例).zip

    c语言Turbo C下写的俄罗斯方块 c语言UDP传输系统源码 c语言万年历源码 c语言五子棋源码 c语言俄罗斯方块 c语言做的一个任务管理器 c语言做的播放器源码 c语言做的绘图板系统 c语言别踩白块儿(双人版)源码 c语言力学...

    C语言小游戏开发

    C语言小游戏开发

    基于C语言开发的连连看游戏源码

    基于C语言开发的连连看游戏源码 基于C语言开发的连连看游戏源码 基于C语言开发的连连看游戏源码 基于C语言开发的连连看游戏源码 基于C语言开发的连连看游戏源码 基于C语言开发的连连看游戏源码 基于C语言开发的...

    基于C语言开发的24点游戏源码

    基于C语言开发的24点游戏源码 基于C语言开发的24点游戏源码 基于C语言开发的24点游戏源码 基于C语言开发的24点游戏源码 基于C语言开发的24点游戏源码 基于C语言开发的24点游戏源码 基于C语言开发的24点游戏源码 基于...

    基于C语言开发的迷宫小游戏完整源码

    基于C语言开发的迷宫小游戏完整源码 基于C语言开发的迷宫小游戏完整源码 基于C语言开发的迷宫小游戏完整源码 基于C语言开发的迷宫小游戏完整源码 基于C语言开发的迷宫小游戏完整源码 基于C语言开发的迷宫小游戏完整...

    纯C语言小游戏

    纯C语言小游戏,有地图编辑,有游戏逻辑设计,经过测试的,完全可以运行,在VS2008上开发的,希望您能喜欢。

    C语言课程设计与游戏开发实践教程-游戏代码.rar

    C语言课程设计与游戏开发实践教程-游戏代码.rar

    Linux系统纯C语言开发网络游戏存储引擎

    资源名称:Linux系统纯C语言开发网络游戏存储引擎 教程内容:[第1节] 1-1-1为公司搭建Linux下的c开发环境[第2节] 1-1-2为公司搭建Linux下的c开发环境[第3节] 2-1-1C语言数据类型[第4节] 2-1-2数据的快速引用[第5节]...

    62套C语言小游戏源码

    C资源,包含吃豆人、俄罗斯方块、别踩白块等诸多经典小游戏。感兴趣的朋友可以下载下来研究。(可运行,供学习设计参考): c语言24点游戏源码 c语言Turbo C下写的俄罗斯方块 c语言UDP传输系统源码 c语言万年历源码 ...

    60多套C语言小游戏源码

    c语言Turbo C下写的俄罗斯方块 c语言UDP传输系统源码 c语言万年历源码 c语言五子棋源码 c语言俄罗斯方块 c语言做的一个任务管理器 c语言做的播放器源码 c语言做的绘图板系统 c语言别踩白块儿(双人版)源码 c语言力学...

    C语言开发打字游戏C语言开发打字游戏.doc

    C语言开发打字游戏C语言开发打字游戏

    c语言游戏编程的不错的好教程

    使用c语言进行游戏开发,在开发的同时可以很快地掌握技术,学以致用。希望所有看到的或者正在学习c的朋友喜欢!

    C语言 几个小游戏的C语言开发

    几个小游戏的C语言开发 几个小游戏的C语言开发几个小游戏的C语言开发

    C语言小游戏开发实例

    适合学了一定基础,想是编游戏的朋友!C语言开发实例小游戏教程。CHM格式。

    C语言游戏引擎开发技术

    对于电脑游戏来说, 游戏引擎是用于控制游戏功能的主程序, 游戏引擎和游戏之间的关系就象一部汽车和汽车引擎之间的关系,游戏引擎是整个游戏的框架, 框架设计好之后, 才能进行关卡设计动画设计以及建模等。

    C语言 开发纸牌游戏

    任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数...

    游戏开发 c语言 程序设计 飞机大战

    大一下小学期看了知乎上童晶老师的书《“c语言开发设计与游戏开发实践”》,看到飞机大战 那部分兴致大增,遂决定自己也来写一个。 程序用的是单纯的C语言,调用了EasyX库的函数。 编译环境:Visual Studio ,VC6.0...

    C语言开发的简单小游戏

    游戏,C语言开发的简单小游戏、可供初学者学习

    基于C语言开发的配有图片和音乐的打字母游戏

    基于C语言开发的配有图片和音乐的打字母游戏 基于C语言开发的配有图片和音乐的打字母游戏 基于C语言开发的配有图片和音乐的打字母游戏 基于C语言开发的配有图片和音乐的打字母游戏 基于C语言开发的配有图片和音乐的...

Global site tag (gtag.js) - Google Analytics