新俄罗斯方块
邦邦小剧场给的灵感,之前也看过各种各样的俄罗斯方块,是经典,就在于它总能hold住各种各样类型,就像经典的书总能运用在各种各样的场合,而这经典的游戏总能改编结合成各种各样类型的新游,合适又创新。这次制作分了两步,先是把原来的俄罗斯方块改成简易型,就是把原来各种各样的方块类型归一化成两个格子拼起来,规则还是铺满一层就消除,然后下沉;再是改成消消乐型,给每次的两个格子不同颜色,相同颜色的十个格子消除,然后下沉,铺满不再消除,但是combo效果的功能没有加上,有机会可以加。
简易型俄罗斯方块代码:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <ctype.h>
#include <vector>
#include <math.h>
#include <iomanip>
#include <graphics.h>
#include <conio.h>
#include <windows.h>
#include <fstream>
#include <string>
using namespace std;
struct Node
{
int posx,posy;
int num;
int lifenum;
int colornum;
};
Node box[211];
int exit1,exit2,exit3;
clock_t t1,t2,t3;
int flag,flag1;
int speed;
int seed1;
int point;
void W()
{
int i,j,k;
if(flag==flag1-1&&box[flag-10].lifenum==0){
if(box[flag-10].lifenum==0){box[flag-10].lifenum=1;box[flag-10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1=flag-10;}
}
else if(flag==flag1+1&&box[flag+10].lifenum==0){
if(box[flag+10].lifenum==0){box[flag+10].lifenum=1;box[flag+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1=flag+10;}
}
else if(flag==flag1-10&&box[flag+1].lifenum==0&&flag%10<9){
if(box[flag+1].lifenum==0){box[flag+1].lifenum=1;box[flag+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1=flag+1;}
}
else if(flag==flag1+10&&flag%10>0){
if(box[flag-1].lifenum==0){box[flag-1].lifenum=1;box[flag-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1=flag-1;}
}
}
void A()
{
int i,j,k;
if(flag%10>0&&flag1%10>0){
if(flag==flag1-1&&box[flag-1].lifenum==0){
box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;flag--;
box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1--;
}
else if(flag1==flag-1&&box[flag1-1].lifenum==0){
box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1--;
box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;flag--;
}
else if(box[flag-1].lifenum==0&&box[flag1-1].lifenum==0){
box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;flag--;
box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1--;
}
}
}
void D()
{
int i,j,k;
if(flag%10<9&&flag1%10<9){
if(flag==flag1+1&&box[flag+1].lifenum==0){
box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;flag++;
box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1++;
}
else if(flag1==flag+1&&box[flag1+1].lifenum==0){
box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1++;
box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;flag++;
}
else if(box[flag+1].lifenum==0&&box[flag1+1].lifenum==0){
box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;flag++;
box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1++;
}
}
}
void check()
{
int i,j,k,t;
for(i=19;i>=1;i--){
t=0;
for(j=0;j<=9;j++){
if(box[i*10+j].lifenum==0){
t=1;
break;
}
}
if(t==0){
for(j=0;j<=9;j++){
box[i*10+j].lifenum=0;
}
for(i=189;i>=0;i--){
if(box[i+10].lifenum==0&&box[i].lifenum!=0){
box[i+10].lifenum=1;
box[i+10].colornum=box[i].colornum;
box[i].lifenum=0;
}
}
i=20;
point=point+10;
}
}
}
void draw()
{
int i,j,k;
FlushBatchDraw();
clearrectangle(0,0,400,400);
line(98,0,98,400);
line(302,0,302,400);
for(i=0;i<200;i++){
if(box[i].lifenum==1){
fillrectangle(box[i].posx,box[i].posy,box[i].posx+20,box[i].posy+20);
}
}
}
void create()
{
int i,j;
if(box[4].lifenum!=0||box[14].lifenum!=0){
exit1=1;exit2=1;exit3=1;
}
else{
box[4].colornum=1;
box[14].colornum=box[4].colornum;
box[4].lifenum=1;
box[14].lifenum=1;
}
flag=4;flag1=14;
}
void S()
{
int i,j,k;
if(flag==flag1+10&&box[flag+10].lifenum==0){
box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;flag+=10;
box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1+=10;
}
else if(flag==flag1-10&&box[flag1+10].lifenum==0){
box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1+=10;
box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;flag+=10;
}
else if(box[flag+10].lifenum==0&&box[flag1+10].lifenum==0){
box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;flag1+=10;
box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;flag+=10;
}
else{
check();
create();
}
draw();
}
void initialization()
{
int i,j,k;
exit1=0;exit2=0;exit3=0;
seed1=0;
speed=300;
point=0;
initgraph(400, 400,SHOWCONSOLE);
setlinecolor(GREEN);
line(98,0,98,400);
line(302,0,302,400);
for(i=0;i<200;i++){
box[i].num=i;
box[i].posx=100+20*(i%10);
box[i].posy=20*(i/10);
box[i].lifenum=0;
box[i].colornum=0;
}
for(i=200;i<210;i++){
box[i].lifenum=1;
}
}
void move()
{
int i;
char j;
BeginBatchDraw();
create();
draw();
while(exit1==0){
Sleep(1000);
t1=clock();
t2=clock();
while(exit2==0){
if (_kbhit()){
j=_getch();
fflush(stdin);
switch(j){
case 'w':W();break;
case 'a':A();break;
case 'd':D();break;
case 's':S();break;
case 'o':speed=0xffffff;break;
case 'i':speed=300;break;
case 'p':exit2=1;exit1=1;break;
default:break;
}
fflush(stdin);
}
t2=clock();
while(t2-t1>=speed){
t1=clock();
S();
}
}
}
EndBatchDraw();
}
void carry()
{
int i,j,k;
initialization();
while(exit3==0){
move();
}
_getch();
closegraph();
cout<<"得分:"<<point<<endl;
}
int main()
{
carry();
return 0;
}
消消乐俄罗斯方块代码:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <ctype.h>
#include <vector>
#include <math.h>
#include <iomanip>
#include <graphics.h>
#include <conio.h>
#include <windows.h>
#include <fstream>
#include <string>
using namespace std;
struct Node
{
int posx,posy;
int num;
int lifenum;
int colornum;
};
struct Node1
{
int num;
int lifenum;
int flagnum,flag1num;
};
struct Node2
{
int num;
int lifenum;
int boxnum;
};
Node box[211];
Node1 eat[100];
Node2 box1[200];
int exit1,exit2,exit3,exit4;
clock_t t1,t2,t3;
int flag,flag1;
int speed;
int seed1;
int point;
COLORREF img[8];
void W()
{
int i,j,k;
if(flag==flag1-1&&box[flag-10].lifenum==0){
if(box[flag-10].lifenum==0){box[flag-10].lifenum=1;box[flag-10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1=flag-10;}
}
else if(flag==flag1+1&&box[flag+10].lifenum==0){
if(box[flag+10].lifenum==0){box[flag+10].lifenum=1;box[flag+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1=flag+10;}
}
else if(flag==flag1-10&&box[flag+1].lifenum==0&&flag%10<9){
if(box[flag+1].lifenum==0){box[flag+1].lifenum=1;box[flag+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1=flag+1;}
}
else if(flag==flag1+10&&flag%10>0){
if(box[flag-1].lifenum==0){box[flag-1].lifenum=1;box[flag-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1=flag-1;}
}
}
void A()
{
int i,j,k;
if(flag%10>0&&flag1%10>0){
if(flag==flag1-1&&box[flag-1].lifenum==0){
box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag--;
box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1--;
}
else if(flag1==flag-1&&box[flag1-1].lifenum==0){
box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1--;
box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag--;
}
else if(box[flag-1].lifenum==0&&box[flag1-1].lifenum==0){
box[flag-1].lifenum=1;box[flag-1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag--;
box[flag1-1].lifenum=1;box[flag1-1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1--;
}
}
}
void D()
{
int i,j,k;
if(flag%10<9&&flag1%10<9){
if(flag==flag1+1&&box[flag+1].lifenum==0){
box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag++;
box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1++;
}
else if(flag1==flag+1&&box[flag1+1].lifenum==0){
box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1++;
box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag++;
}
else if(box[flag+1].lifenum==0&&box[flag1+1].lifenum==0){
box[flag+1].lifenum=1;box[flag+1].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag++;
box[flag1+1].lifenum=1;box[flag1+1].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1++;
}
}
}
void check(int x)
{
int i,j,k,t,flag2;
for(i=0;i<200;i++){
box1[i].num=i;
box1[i].lifenum=0;
box1[i].boxnum=101;
}
i=eat[x].flagnum;
box1[0].boxnum=eat[x].flagnum;
flag2=1;
for(i=0;i<flag2;i++){
j=box1[i].boxnum;
if(j%10!=0){
j=j-1;
for(j;j%10!=9&&j>=0;j--){
if(box[j].colornum==box[eat[x].flagnum].colornum){
exit3=0;
for(k=0;k<flag2;k++){
if(box1[k].boxnum==j){
exit3=1;break;
}
}
if(exit3==0){box1[flag2].boxnum=j;flag2++;}
}
else{
break;
}
}
}
j=box1[i].boxnum;
if(j%10!=9){
j=j+1;
for(j;j%10!=0&&j<=199;j++){
if(box[j].colornum==box[eat[x].flagnum].colornum){
exit3=0;
for(k=0;k<flag2;k++){
if(box1[k].boxnum==j){
exit3=1;break;
}
}
if(exit3==0){box1[flag2].boxnum=j;flag2++;}
}
else{
break;
}
}
}
j=box1[i].boxnum;
if(j/10!=0){
j=j-10;
for(j;j>=0;j-=10){
if(box[j].colornum==box[eat[x].flagnum].colornum){
exit3=0;
for(k=0;k<flag2;k++){
if(box1[k].boxnum==j){
exit3=1;break;
}
}
if(exit3==0){box1[flag2].boxnum=j;flag2++;}
}
else{
break;
}
}
}
j=box1[i].boxnum;
if(j/10!=9){
j=j+10;
for(j;j<=199;j+=10){
if(box[j].colornum==box[eat[x].flagnum].colornum){
exit3=0;
for(k=0;k<flag2;k++){
if(box1[k].boxnum==j){
exit3=1;break;
}
}
if(exit3==0){box1[flag2].boxnum=j;flag2++;}
}
else{
break;
}
}
}
}
if(flag2>=10){
point+=flag2;
for(i=0;i<flag2;i++){
box[box1[i].boxnum].lifenum=0;
box[box1[i].boxnum].colornum=0;
j=0;
while(box1[i].boxnum!=eat[j].flagnum&&box1[i].boxnum!=eat[j].flag1num){
j++;
}
eat[j].lifenum=0;
}
j=1;
while(j!=0){
j=0;
for(i=0;i<100;i++){
if(eat[i].lifenum==1){
if(eat[i].flagnum==eat[i].flag1num+10&&box[eat[i].flagnum+10].lifenum==0){
box[eat[i].flagnum+10].lifenum=1;box[eat[i].flagnum+10].colornum=box[eat[i].flagnum].colornum;box[eat[i].flagnum].lifenum=0;box[eat[i].flagnum].colornum=0;eat[i].flagnum+=10;
box[eat[i].flag1num+10].lifenum=1;box[eat[i].flag1num+10].colornum=box[eat[i].flag1num].colornum;box[eat[i].flag1num].lifenum=0;box[eat[i].flag1num].colornum=0;eat[i].flag1num+=10;
j++;
}
else if(eat[i].flagnum==eat[i].flag1num-10&&box[eat[i].flag1num+10].lifenum==0){
box[eat[i].flag1num+10].lifenum=1;box[eat[i].flag1num+10].colornum=box[eat[i].flag1num].colornum;box[eat[i].flag1num].lifenum=0;box[eat[i].flag1num].colornum=0;eat[i].flag1num+=10;
box[eat[i].flagnum+10].lifenum=1;box[eat[i].flagnum+10].colornum=box[eat[i].flagnum].colornum;box[eat[i].flagnum].lifenum=0;box[eat[i].flagnum].colornum=0;eat[i].flagnum+=10;
j++;
}
else if(box[eat[i].flagnum+10].lifenum==0&&box[eat[i].flag1num+10].lifenum==0){
box[eat[i].flag1num+10].lifenum=1;box[eat[i].flag1num+10].colornum=box[eat[i].flag1num].colornum;box[eat[i].flag1num].lifenum=0;box[eat[i].flag1num].colornum=0;eat[i].flag1num+=10;
box[eat[i].flagnum+10].lifenum=1;box[eat[i].flagnum+10].colornum=box[eat[i].flagnum].colornum;box[eat[i].flagnum].lifenum=0;box[eat[i].flagnum].colornum=0;eat[i].flagnum+=10;
j++;
}
}
}
}
}
}
void draw()
{
int i,j,k;
FlushBatchDraw();
clearrectangle(0,0,400,400);
line(98,0,98,400);
line(302,0,302,400);
for(i=0;i<200;i++){
if(box[i].lifenum==1&&box[i].colornum!=0){
setfillcolor(img[box[i].colornum]);
fillrectangle(box[i].posx,box[i].posy,box[i].posx+20,box[i].posy+20);
}
else if(box[i].lifenum==1&&box[i].colornum==0){
box[i].lifenum=0;
}
}
}
void create()
{
int i,j;
if(box[4].lifenum!=0||box[14].lifenum!=0){
exit1=1;exit2=1;exit4=1;
}
else{
seed1++;
srand(seed1);
box[4].colornum=rand()%5+1;
box[14].colornum=box[4].colornum;
box[4].lifenum=1;
box[14].lifenum=1;
}
flag=4;flag1=14;
}
void S()
{
int i,j,k,t;
if(flag==flag1+10&&box[flag+10].lifenum==0){
box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag+=10;
box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1+=10;
}
else if(flag==flag1-10&&box[flag1+10].lifenum==0){
box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1+=10;
box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag+=10;
}
else if(box[flag+10].lifenum==0&&box[flag1+10].lifenum==0){
box[flag1+10].lifenum=1;box[flag1+10].colornum=box[flag1].colornum;box[flag1].lifenum=0;box[flag1].colornum=0;flag1+=10;
box[flag+10].lifenum=1;box[flag+10].colornum=box[flag].colornum;box[flag].lifenum=0;box[flag].colornum=0;flag+=10;
}
else{
i=0;
while(eat[i].lifenum!=0){
i++;
}
eat[i].lifenum=1;
eat[i].flagnum=flag;
eat[i].flag1num=flag1;
check(i);
create();
}
draw();
}
void initialization()
{
int i,j,k;
exit1=0;exit2=0;exit3=0;exit4=0;
seed1=0;
speed=300;
point=0;
initgraph(400, 400,SHOWCONSOLE);
img[1]=LIGHTRED;
img[2]=YELLOW;
img[3]=LIGHTGREEN;
img[4]=LIGHTBLUE;
img[5]=LIGHTMAGENTA;
setlinecolor(GREEN);
line(98,0,98,400);
line(302,0,302,400);
for(i=0;i<200;i++){
box[i].num=i;
box[i].posx=100+20*(i%10);
box[i].posy=20*(i/10);
box[i].lifenum=0;
box[i].colornum=0;
}
for(i=200;i<210;i++){
box[i].lifenum=1;
}
}
void move()
{
int i;
char j;
BeginBatchDraw();
create();
draw();
while(exit1==0){
Sleep(1000);
t1=clock();
t2=clock();
while(exit2==0){
if (_kbhit()){
j=_getch();
fflush(stdin);
switch(j){
case 'w':W();break;
case 'a':A();break;
case 'd':D();break;
case 's':S();break;
case 'o':speed=0xffffff;break;
case 'i':speed=300;break;
case 'p':exit2=1;exit1=1;break;
default:break;
}
fflush(stdin);
}
t2=clock();
while(t2-t1>=speed){
t1=clock();
S();
}
}
}
EndBatchDraw();
}
void carry()
{
int i,j,k;
initialization();
while(exit4==0){
move();
}
_getch();
closegraph();
cout<<"得分:"<<point<<endl;
}
int main()
{
carry();
return 0;
}
演示视频1:
演示视频2:
上一篇:星际战甲高斯配卡推荐
下一篇:第二届英雄联盟手游联赛进行中,全面升级看点十足
最近更新游戏资讯
- 秋瓷炫老公什么星座(秋瓷炫血型星座)
- 法国电影中的女性符号和觉醒
- 惊人的秘密:颜色政治背后的渗透与分化
- 让BB接受家庭伦理教育洗礼
- 语言礼仪十篇
- 美军欲打造AI战机部队 面临严重伦理问题
- 医学伦理学:医学伦理学的主要观点和基本理论
- 豆瓣9.0分以上|50本好书推荐
- 达尔文的故事赏析八篇
- 港台国学类学术会议信息(四十)
- 东野圭吾本格推理极致之作《回廊亭杀人事件》开票5折抢
- 辩论赛包含哪些技巧?
- 【铸牢中华民族共同体意识
- 徽州醉春丨水墨画里的徽州-婺源篁岭-江岭- 新安江- 西递- 呈坎丨六天五夜
- 心理治疗总论 【医学心理学与精神医学版】
- 苏德超教授的新论文:道德绑架为何难以避免
- 企业社会责任综述十篇
- 政务礼仪的作用(五篇)
- 韩素希出道最大尺度 泄朴海俊指导秘诀 咬牙拍完《夫妇》只有2感想
- 《封神三部曲》:为什么要重述这个神话?
- 输血和喝血真的能帮助女性和老人保持年轻吗?
- 集齐九部《星球大战》,教你如何把家庭伦理拍成太空歌剧
- 这十部顶级英美剧,是当之无愧的业界巅峰,每一部都值得通宵去看
- 邪王宠妻之金牌医妃
- 【博览】《科奖在线》:“破四唯、立新标”典型案例官宣,项目/人才/成果未来可能这