申明:前不久选修了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/
分享到:
相关推荐
c语言Turbo C下写的俄罗斯方块 c语言UDP传输系统源码 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语言开发的迷宫小游戏完整源码 基于C语言开发的迷宫小游戏完整源码 基于C语言开发的迷宫小游戏完整源码 基于C语言开发的迷宫小游戏完整源码 基于C语言开发的迷宫小游戏完整源码 基于C语言开发的迷宫小游戏完整...
纯C语言小游戏,有地图编辑,有游戏逻辑设计,经过测试的,完全可以运行,在VS2008上开发的,希望您能喜欢。
C语言课程设计与游戏开发实践教程-游戏代码.rar
资源名称:Linux系统纯C语言开发网络游戏存储引擎 教程内容:[第1节] 1-1-1为公司搭建Linux下的c开发环境[第2节] 1-1-2为公司搭建Linux下的c开发环境[第3节] 2-1-1C语言数据类型[第4节] 2-1-2数据的快速引用[第5节]...
C资源,包含吃豆人、俄罗斯方块、别踩白块等诸多经典小游戏。感兴趣的朋友可以下载下来研究。(可运行,供学习设计参考): c语言24点游戏源码 c语言Turbo C下写的俄罗斯方块 c语言UDP传输系统源码 c语言万年历源码 ...
c语言Turbo C下写的俄罗斯方块 c语言UDP传输系统源码 c语言万年历源码 c语言五子棋源码 c语言俄罗斯方块 c语言做的一个任务管理器 c语言做的播放器源码 c语言做的绘图板系统 c语言别踩白块儿(双人版)源码 c语言力学...
C语言开发打字游戏C语言开发打字游戏
使用c语言进行游戏开发,在开发的同时可以很快地掌握技术,学以致用。希望所有看到的或者正在学习c的朋友喜欢!
几个小游戏的C语言开发 几个小游戏的C语言开发几个小游戏的C语言开发
适合学了一定基础,想是编游戏的朋友!C语言开发实例小游戏教程。CHM格式。
对于电脑游戏来说, 游戏引擎是用于控制游戏功能的主程序, 游戏引擎和游戏之间的关系就象一部汽车和汽车引擎之间的关系,游戏引擎是整个游戏的框架, 框架设计好之后, 才能进行关卡设计动画设计以及建模等。
任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数...
大一下小学期看了知乎上童晶老师的书《“c语言开发设计与游戏开发实践”》,看到飞机大战 那部分兴致大增,遂决定自己也来写一个。 程序用的是单纯的C语言,调用了EasyX库的函数。 编译环境:Visual Studio ,VC6.0...
游戏,C语言开发的简单小游戏、可供初学者学习
基于C语言开发的配有图片和音乐的打字母游戏 基于C语言开发的配有图片和音乐的打字母游戏 基于C语言开发的配有图片和音乐的打字母游戏 基于C语言开发的配有图片和音乐的打字母游戏 基于C语言开发的配有图片和音乐的...