返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言俄罗斯方块游戏课程设计
  • 675
分享到

C语言俄罗斯方块游戏课程设计

2024-04-02 19:04:59 675人浏览 安东尼
摘要

本文实例为大家分享了C语言实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下 1、设计流程 2、相关程序 #include<stdio.h> #include&

本文实例为大家分享了C语言实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下

1、设计流程

2、相关程序


#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<time.h>
#include<dos.h>
#include<biOS.h>
#define LEFT 0x4b00         
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define   TIMER   0x1c     

struct Snow
{
int x;
int y;
int speed;
}snow[100];
typedef struct
{
int box[4][4];
int color;
int next;
}SHAPE;
int x=0,y=4,fORM[16][12]={            
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
};                      
SHAPE shapes[19]={
{1,0,0,0,
   1,0,0,0,
   1,1,0,0,
   0,0,0,0,CYAN,1},
{1,1,1,0,
   1,0,0,0,
   0,0,0,0,
   0,0,0,0,CYAN,2},
{1,1,0,0,
   0,1,0,0,
   0,1,0,0,
   0,0,0,0,CYAN,3},
{0,0,0,0,
   0,0,1,0,
   1,1,1,0,
   0,0,0,0,CYAN,0},
{0,1,0,0,
   0,1,0,0,
   1,1,0,0,
   0,0,0,0,MAGENTA,5},
{1,0,0,0,
   1,1,1,0,
   0,0,0,0,
   0,0,0,0,MAGENTA,6},
{1,1,0,0,
   1,0,0,0,
   1,0,0,0,
   0,0,0,0,MAGENTA,7},
{1,1,1,0,
   0,0,1,0,
   0,0,0,0,
   0,0,0,0,MAGENTA,4},
{1,0,0,0,
   1,1,0,0,
   0,1,0,0,
   0,0,0,0,YELLOW,9},
{0,1,1,0,
   1,1,0,0,
   0,0,0,0,
   0,0,0,0,YELLOW,8},
{0,1,0,0,
   1,1,0,0,
   1,0,0,0,
   0,0,0,0,BROWN,11},
{1,1,0,0,
   0,1,1,0,
   0,0,0,0,
   0,0,0,0,BROWN,10},
{0,1,0,0,
   1,1,1,0,
   0,0,0,0,
   0,0,0,0,WHITE,13},
{1,0,0,0,
   1,1,0,0,
   1,0,0,0,
   0,0,0,0,WHITE,14},
{1,1,1,0,
   0,1,0,0,
   0,0,0,0,
   0,0,0,0,WHITE,15},
{0,1,0,0,
   1,1,0,0,
   0,1,0,0,
   0,0,0,0,WHITE,12},
{1,0,0,0,
   1,0,0,0,
   1,0,0,0,
   1,0,0,0,RED,17},
{1,1,1,1,
   0,0,0,0,
   0,0,0,0,
   0,0,0,0,RED,16},
{1,1,0,0,
   1,1,0,0,
   0,0,0,0,
   0,0,0,0,BLUE,18}
}; 

int TimerCounter=0;
int snownum=0;
int size;
int change1=10;
int annal[4][2],score=0,level=0,color,Boxnumber;
void plot();
void operation();
void *save1,*save2;
void Copy();
void DrawSnow();
void Pr();
void   interrupt   (   *oldhandler)();
void   interrupt   newhandler( )
{
TimerCounter++;        
TimerCounter==36;
oldhandler();
}
void   SetTimer(void   interrupt   (*IntProc)())
{
oldhandler=getvect(TIMER);
disable();                
setvect(TIMER,IntProc);
enable();               
}
void   KillTimer()                                                           
{
disable();
setvect(TIMER,oldhandler);
enable();
}
void main()
{
int gdriver=DETECT,gmode;
SetTimer(newhandler);                      
reGISterbgidriver(EGAVGA_driver);
initgraph(&gdriver,&gmode,"c:\\turboc2");
Copy();
DrawSnow();
closegraph();
initgraph(&gdriver,&gmode,"E:\\TC20H\\INCLUDE\\GRAPHICS.H");        
plot();
operation();
getch();
}
  void Copy()
{
setcolor(0);
setfillstyle(SOLID_FILL,15);
fillellipse(200,200,4,4);
size=imagesize(196,196,204,204);
save1=malloc(size);
save2=malloc(size);
getimage(196,196,204,204,save1);
getimage(96,96,104,104,save2);
}
void Pr()
{
int fr[]={392,392,440,294,262,262,220,294,392,392,
           440,532,440,392,262,262,220,294,392,294,
           262,247,220,196,392,294,330,294,262,262,
           220,294,330,294,262,294,22,247,220,196};
setcolor(change1/10);
settextstyle(0,0,3);
outtextxy(100,200,"Welcome to our Game!!!”);
sound(fr[change1/10]);
}
void DrawSnow()
{
int i;
int sx[62];
randomize();
for(i=0;i<62;i++)
sx[i]=(i+2)*10;
cleardevice();
while(!kbhit())
{
Pr();
if (snownum!=100)
{
    snow[snownum].speed=2+random(5);
    i=random(62);
    snow[snownum].x=sx[i];
    snow[snownum].y=10-random(100);
}
for(i=0;i<snownum;i++)
   putimage(snow[i].x,snow[i].y,save2,COPY_PUT);
  Pr();
if(snownum!=100)
   snownum++;

setfillstyle(SOLID_FILL,15);
for(i=0;i<snownum;i++)
   {
    snow[i].y+=snow[i].speed;
    putimage(snow[i].x,snow[i].y,save1,COPY_PUT);
    if(snow[i].y>500)
    snow[i].y=10-random(200);
   }
change1++;
if(change1==140)
change1=10;
}
nosound();
}
void plot()
{
int i,j;
char ch1[]={24,'-','R','o','l','l','\0'},
     ch2[]={25,'-','D','o','w','n','w','a','r','d','s','\0'},
     ch3[]={26,'-','T','u','r','n',' ','L','e','f','t','\0'},
     ch4[]={27,'-','T','u','r','n',' ','R','i','g','h','t','\0'};
setcolor(LIGHTGRAY);
rectangle(200,30,350,255);
i=0;
while((i++)<10)
  line(200+i*15,30,200+i*15,255);
i=0;
while((i++)<15)
  line(200,30+i*15,350,30+i*15);
setcolor(WHITE);
rectangle(170,270,390,330);
outtextxy(190,280,ch1);
outtextxy(270,280,ch2);
outtextxy(190,300,ch3);
outtextxy(290,300,ch4);
outtextxy(190,320,"Esc-Exit");
settextjustify(1,1);
outtextxy(390,50,"score");
outtextxy(390,100,"lexel");
outtextxy(390,150,"Next box");
outtextxy(390,65,"0");
outtextxy(390,115,"0");
}
void nextboxfun(SHAPE shapes[],int i) 
{
int m,n;
for(m=0;m<4;m++)
   for(n=0;n<4;n++)
    if(shapes[i].box[m][n])
    {
     setfillstyle(1,shapes[i].color);
     bar(370+n*15+1,180+m*15+1,370+n*15+15-1,180+m*15+15-1);
     setcolor(LIGHTGRAY);
     rectangle(370+n*15,180+m*15,370+n*15+15,180+m*15+15);
    }
}
int Leftmobile()
{
int m,k=-1;         
for(m=0;m<4;m++)
{
   if(annal[m][0]!=k)
   {
    if(form[annal[m][0]][annal[m][1]-1])
     return(0);
    k=annal[m][0];
   }
}
return(1);
}
int Rightmobile()
{
int m,k=-1;
for(m=3;m>=0;m--)
{
   if(annal[m][0]!=k)
   {
    if(form[annal[m][0]][annal[m][1]+1])
     return(0);
    k=annal[m][0];
   }
}
return(1);
}
int Downmobile()
{
int m;
for(m=0;m<4;m++)
   form[annal[m][0]][annal[m][1]]=2;     
for(m=0;m<4;m++)
{
   if(form[annal[m][0]+1][annal[m][1]]==1)          
   {
    for(m=0;m<4;m++)
     form[annal[m][0]][annal[m][1]]=1;
    return(0);
   }
}
for(m=0;m<4;m++)                        
   form[annal[m][0]][annal[m][1]]=1;
return(1);
}
void LeftRedraw()
{
int m;
y--;
for(m=0;m<4;m++)
{
   setfillstyle(1,BLACK);
bar(200+(annal[m][1]-1)*15+1,30+annal[m][0]*15+1,200+(annal[m][1]-1)*15+15-1,30+annal[m][0]*15+15-1);          
}
for(m=0;m<4;m++)
   form[annal[m][0]][annal[m][1]]=0;
for(m=0;m<4;m++)
{
   annal[m][1]--;
   form[annal[m][0]][annal[m][1]]=1;
   setfillstyle(1,color);
bar(200+(annal[m][1]-1)*15+1,30+annal[m][0]*15+1,200+(annal[m][1]-1)*15+15-1,30+annal[m][0]*15+15-1);       
}
}
void RightRedraw()
{
int m;
y++;
for(m=0;m<4;m++)
{
   setfillstyle(1,BLACK);
bar(200+(annal[m][1]-1)*15+1,30+annal[m][0]*15+1,200+(annal[m][1]-1)*15+15-1,30+annal[m][0]*15+15-1);           
}
for(m=0;m<4;m++)
   form[annal[m][0]][annal[m][1]]=0;
for(m=0;m<4;m++)
{ 
 annal[m][1]++;
  form[annal[m][0]][annal[m][1]]=1;
  setfillstyle(1,color);
bar(200+(annal[m][1]-1)*15+1,30+annal[m][0]*15+1,200+(annal[m][1]-1)*15+15-1,30+annal[m][0]*15+15-1); }          
}
void DownRedraw()
{
int m,n;
x++;
for(m=0;m<4;m++)
{
   setfillstyle(1,BLACK);
bar(200+(annal[m][1]-1)*15+1,30+annal[m][0]*15+1,200+(annal[m][1]-1)*15+15-1,30+annal[m][0]*15+15-1);            
}
for(m=0;m<4;m++)
   form[annal[m][0]][annal[m][1]]=0;
for(m=0;m<4;m++)
{
   annal[m][0]++;
   form[annal[m][0]][annal[m][1]]=1;
   setfillstyle(1,color); bar(200+(annal[m][1]-1)*15+1,30+annal[m][0]*15+1,200+(annal[m][1]-1)*15+15-1,30+annal[m][0]*15+15-1);      
}
}
int UPmobile()
{
int m,n,k;
k=shapes[Boxnumber].next;
for(m=0;m<4;m++)
   form[annal[m][0]][annal[m][1]]=2;          
for(m=0;m<4;m++)
   for(n=0;n<4;n++)
   {
    if(form[x+m][y+n]==1&&shapes[k].box[m][n])       
{
for(m=0;m<4;m++)
      form[annal[m][0]][annal[m][1]]=1;
     return(0);
}
}
 for(m=0;m<4;m++)
    form[annal[m][0]][annal[m][1]]=1;
   return(1);
}
void change()
{
int m,n,k,i=0;
k=Boxnumber=shapes[Boxnumber].next;
for(m=0;m<4;m++)
{
   setfillstyle(1,BLACK);
bar(200+(annal[m][1]-1)*15+1,30+annal[m][0]*15+1,200+(annal[m][1]-1)*15+15-1,30+annal[m][0]*15+15-1);        
}
for(m=0;m<4;m++)               
   form[annal[m][0]][annal[m][1]]=0;
for(m=0;m<4;m++)              
   for(n=0;n<4;n++)
    if(shapes[k].box[m][n])
    {
     annal[i][0]=x+m;         
     annal[i][1]=y+n;
     i++;
    }
    for(m=0;m<4;m++)              
    {
     form[annal[m][0]][annal[m][1]]=1;
     setfillstyle(1,color);   bar(200+(annal[m][1]-1)*15+1,30+annal[m][0]*15+1,200+(annal[m][1]-1)*15+15-1,30+annal[m][0]*15+15-1)         ;
    }
}
void FulllineJudge()
{
void *p1;
int m,n,i,k,p,q;
char *ch;
if(!(p1=malloc(imagesize(200,30,350,255))))
{
   printf("开辟空间失败\n");
   getch();
   exit(1);
}
i=0;
for(m=14;m>=0;m--)    
{
   for(n=1;n<=10;n++)
   {
    if(!form[m][n])         
     break;
    else if(n==10)           
    {
     i++;            
     for(p=m;p>=1;p--)
      for(q=1;q<=10;q++)        
       form[p][q]=form[p-1][q];
      for(p=1;p<=10;p++)          
       form[0][p]=0;
      getimage(200,30,350,30+m*15,p1);
      putimage(200,45,p1,0);
      m++;
    }
   }
  if(i==4)    
    break;
}
if(i==1)      
   score+=10;
if(i==2)
   score+=30;
if(i==3)
   score+=60;
if(i==4)
   score+=100;
setcolor(WHITE);       
sprintf(ch,"%d",score);
setfillstyle(1,BLACK);
bar(380,60,400,80);
outtextxy(390,65,ch);
level=score/500;
setfillstyle(1,BLACK);
bar(380,110,400,130);
sprintf(ch,"%d",level);
outtextxy(390,115,ch);
free(p1);
}
void operation()
{
int newbox,nextbox,m,n,k=1,i,KEY,l,o;
o=1;
srand((unsigned)time(NULL));
nextbox=rand()%19;
while(o)
{
   if(k)           
   {
    x=0,y=4;           
    Boxnumber=newbox=nextbox;
    nextbox=rand()%19;
    setfillstyle(1,BLACK);
    bar(360,160,430,250);
    nextboxfun(shapes,nextbox);
    i=0;
    color=shapes[newbox].color;
    for(m=0;m<4;m++)
     for(n=0;n<4;n++)
      if(shapes[newbox].box[m][n])  
      {
       annal[i][0]=0+m;    
       annal[i][1]=4+n;
       if(form[0+m][4+n])
       {
        setfillstyle(1,BLACK);
        bar(240,130,310,150);
        setcolor(RED);
        outtextxy(275,140,"GAME OVER");
        getch();
        o=0;
       }
       form[0+m][4+n]=1;
       setfillstyle(1,shapes[newbox].color);
       bar(200+n*15+1+45,30+m*15+1,200+n*15+15-1+45,30+m*15+15-1);
       setcolor(LIGHTGRAY);
       rectangle(200+n*15+45,30+m*15,200+n*15+15+45,30+m*15+15);
       i++;
      }
      k=0;
    }
  if(bioskey(1))      
    KEY=bioskey(0);
   else
    KEY=0;
   switch(KEY)
   {
    case LEFT:
    if(Leftmobile())
     LeftRedraw();break;
    case RIGHT:
    if(Rightmobile())
     RightRedraw();break;
    case DOWN:
    if(Downmobile())
     DownRedraw();
    else
    {FulllineJudge();k=1;}break;
   case UP:
    if(UPmobile())
     change();break;
   case ESC:o=0;break;
   }
   if(TimerCounter>(36-level*2))      
   {
    TimerCounter=0;
    if(Downmobile())        
     DownRedraw();
    else
    {FulllineJudge();k=1;}
   }
}
KillTimer();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C语言俄罗斯方块游戏课程设计

本文链接: https://lsjlt.com/news/128494.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言俄罗斯方块游戏课程设计
    本文实例为大家分享了C语言实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下 1、设计流程 2、相关程序 #include<stdio.h> #include&...
    99+
    2024-04-02
  • C语言实现俄罗斯方块课程设计
    本文实例为大家分享了C语言实现俄罗斯方块的具体代码,供大家参考,具体内容如下 该课程设计用VC++6.0操作如下: 1、文件->新建->文件->左边选C/C++ ...
    99+
    2024-04-02
  • C/C++实现俄罗斯方块游戏
    目录一、游戏效果展示二、完整代码三、所需开发环境四、具体项目实现①游戏欢迎界面 welcome( )②游戏背景 initGameScreen( ) ③方块表示 int bl...
    99+
    2024-04-02
  • pygame俄罗斯方块游戏
    俄罗斯方块游戏开发 俄罗斯方块是一款世界级经典游戏,每门语言开发学习初步都会考虑制作俄罗斯方块游戏今天带着大家把俄罗斯方块用python语言开发一次 开发准备 安装python 2.引入游戏库pyga...
    99+
    2023-10-25
    pygame 游戏 python
  • C++实现俄罗斯方块小游戏
    本文实例为大家分享了C++实现俄罗斯方块小游戏的具体代码,供大家参考,具体内容如下 操作说明: D F:左右旋转 J  L:左右移动 E(一堆键都行): 加快下落速度 空格...
    99+
    2024-04-02
  • c++如何实现俄罗斯方块游戏
    这篇文章主要介绍“c++如何实现俄罗斯方块游戏”,在日常操作中,相信很多人在c++如何实现俄罗斯方块游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c++如何实现俄罗斯方块游戏”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-22
  • c++实现俄罗斯方块游戏代码
    俄罗斯方块c++ 1.创建项目2.总共需要创建两个文件,一个main.cpp,一个是elsfk2.h。本人使用的编译器是vs2019. 3.在项目的源文件夹下创建一个文件夹image...
    99+
    2024-04-02
  • C#游戏开发之实现俄罗斯方块游戏
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2023-01-05
    C#俄罗斯方块游戏 C#俄罗斯方块 C# 游戏
  • CocosCreatorTypescript制作俄罗斯方块游戏
    目录1.引言2.需要解决的几个关键问题3.写在最后1.引言 最近开始学cocos,学完Typescript语法之后,跑去看cocos的官方文档,捣鼓了几天,写了一个非常简单的贪吃蛇,...
    99+
    2024-04-02
  • JavaScript canvas实现俄罗斯方块游戏
    俄罗斯方块是个很经典的小游戏,也尝试写了一下。不过我想用尽量简洁逻辑清晰的代码实现。不用过多的代码记录下落方块的模型,或者记录每一个下落方块的x,y。想了下面的思路,然后发现这样很写...
    99+
    2024-04-02
  • c语言俄罗斯方块怎么实现
    在C语言中实现俄罗斯方块游戏需要用到控制台字符界面和一些基本的游戏逻辑。以下是一个简单的实现思路: 界面设计:使用控制台字符来表示...
    99+
    2024-04-02
  • 基于Matlab实现俄罗斯方块游戏
    我最早写的一个matlab小游戏 写的可能不够简洁,但还有可玩性, 先发上来,以后可能改进或出教程。 大家自己探索吧(外挂是哪个按键,更改颜色是哪个按键) 游戏效果 完整代码 fu...
    99+
    2024-04-02
  • 怎么用JavaScript做俄罗斯方块游戏
    这篇文章主要为大家展示了“怎么用JavaScript做俄罗斯方块游戏”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用JavaScript做俄罗斯方块游戏”这篇文章吧。最终游戏效果一开始我们先...
    99+
    2023-06-27
  • python实现简单俄罗斯方块游戏
    本文实例为大家分享了python实现简单俄罗斯方块游戏的具体代码,供大家参考,具体内容如下 import pygame,sys,random,time all_block = [[...
    99+
    2024-04-02
  • Java实现经典俄罗斯方块游戏
    目录前言主要设计功能截图代码实现总结前言 俄罗斯方块是一个最初由阿列克谢帕吉特诺夫在苏联设计和编程的益智类视频游戏。 《俄罗斯方块》的基本规则是移动、旋转和摆放游戏自动输出的各种方块...
    99+
    2024-04-02
  • Java 小游戏开发之俄罗斯方块
    Java项目 俄罗斯方块一、心得二、游戏实例游戏截图目录结构三、代码主界面 Tetris.javapackage com.fry.tetris;import java.util.Arrays;import java.util.Random;...
    99+
    2023-05-31
    java 俄罗斯方块 ava
  • 如何用C语言实现俄罗斯方块
    这篇文章主要介绍“如何用C语言实现俄罗斯方块”,在日常操作中,相信很多人在如何用C语言实现俄罗斯方块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用C语言实现俄罗斯方块”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-08
  • 怎么用Javascript实现俄罗斯方块游戏
    这篇文章主要介绍“怎么用Javascript实现俄罗斯方块游戏”,在日常操作中,相信很多人在怎么用Javascript实现俄罗斯方块游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2024-04-02
  • Python实现简单的俄罗斯方块游戏
    本文实例为大家分享了Python实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下 玩法:童年经典,普通模式没啥意思,小时候我们都是玩加速的。 源码分享: import o...
    99+
    2024-04-02
  • 使用JS+CSS实现俄罗斯方块游戏
    目录前提:设置HTML结构:创建CSS样式:编写JavaScript代码:响应式设计:添加触摸事件支持:测试并优化:代码示例:前提: 要在网页上实现一个适用于PC端和移动端的俄罗斯方...
    99+
    2023-05-14
    JS+CSS JS+CSS实现俄罗斯方块
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作