`
天海浪人
  • 浏览: 36319 次
  • 性别: 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语言小游戏源代码.rar_C语言游戏代码_c语言小游戏_c语言源码网_third785_withtfo

    在本压缩包"C语言小游戏源代码.rar"中,包含了用C语言编写的多个经典小游戏的源代码,如贪吃蛇、扫雷和俄罗斯方块等。这些游戏是学习C语言编程和理解游戏逻辑的绝佳实践案例。下面将分别对这些知识点进行详细说明。 ...

    C语言小游戏开发

    实际上,对于现代C语言开发环境而言,可能需要使用其他方式(如`&lt;conio.h&gt;`)来检测键盘输入。 - **键盘输入检测函数**:`bioskey(0)`用于检测是否有键盘输入,返回当前被按下的键的编码。 **知识点5:循环与条件...

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

    在本教程中,我们将深入探讨如何使用C语言进行游戏开发,这是计算机科学中一个充满挑战且有趣的话题。C语言以其高效、灵活性和底层控制而闻名,是许多游戏引擎的基础,尤其是那些对性能要求极高的游戏。这个压缩包...

    62套C语言小游戏源码

    C语言是一种强大的、低级的编程语言,它被广泛用于系统开发、嵌入式编程以及各种软件应用程序。本资源库中的"62套C语言小游戏源码"是学习和理解C语言编程的宝贵资料,通过分析这些源码,我们可以深入探讨C语言的语法...

    C语言游戏引擎开发技术

    在IT行业中,游戏引擎开发是一项复杂且至关重要的技术,尤其在C语言的背景下,它可以提供高效、低级别的控制,使得开发者能够充分利用硬件性能。本文将深入探讨“C语言游戏引擎开发技术”,阐述游戏引擎的核心概念、...

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

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

    如何用C语言编写游戏

    标题和描述中提到的“如何用C语言编写游戏”,涉及到了编程语言C在游戏开发中的应用。知识点可以从以下几个方面来阐述: 1. 游戏开发的通用概念: 游戏开发是一种高度综合性的艺术形式,它融合了计算机科学、艺术...

    C语言游戏代码大全

    在本资源包中,我们收集了一系列使用C语言编写的经典小游戏源代码,旨在帮助学习者深入理解和实践C语言编程。这些游戏包括双人贪吃蛇、别踩白方块、玫瑰花、矿井逃生以及超级玛丽游戏。让我们逐一探讨这些游戏的编程...

    c语言做的游戏

    "C语言做的游戏"这个标题表明我们将探讨使用C语言开发游戏的相关知识。C语言以其高效、灵活和低级特性,使得游戏开发者能够直接与硬件进行交互,从而创建高性能的游戏。 1. **基础知识**:在使用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语言的特性使得它非常适合开发小游戏。它的低级特性允许直接...

    codeblocks写的c语言小游戏源代码

    通过学习和分析这个C语言实现的贪吃蛇游戏源代码,我们可以深入理解C语言的基础知识和编程技巧,同时也能了解到游戏开发的一些基本原理。这不仅可以提升我们的编程技能,也为今后更复杂的项目开发打下坚实基础。

    2D格斗游戏,C语言实现

    在本项目中,我们讨论的是一个使用C语言开发的2D格斗游戏,它具有开源和自由软件的特点,让我们深入探讨这个项目所涉及的关键技术、设计思路以及C语言在游戏开发中的应用。 首先,2D格斗游戏的核心是游戏引擎。尽管...

    C语言开发的简单小游戏

    本资源是一个使用C语言开发的小游戏,主要面向初学者,旨在帮助他们学习和实践C语言编程。游戏的主要内容包括游戏菜单、游戏主循环、游戏逻辑处理、数据存储和读取等。 游戏的主要结构体包括personal结构体、work...

    用C语言做的打字游戏

    【标题】"用C语言做的打字游戏"揭示了这个项目是使用C语言编程实现的一个打字练习软件。C语言是一种基础且强大的编程语言,它以其简洁、高效和灵活的特性广泛应用于系统开发、嵌入式系统以及各种软件工程。在这款...

    使用C语言开发的小游戏超级玛丽源码,适合刚入门学习C语言编程的爱好者

    本篇将围绕“使用C语言开发的小游戏超级玛丽源码”这一主题,深入探讨其中涉及的关键知识点,帮助读者理解和掌握C语言编程的基本原理和技巧。 首先,我们来看C语言在游戏开发中的应用。C语言由于其低级特性,可以...

Global site tag (gtag.js) - Google Analytics