专栏文章
easyx俄罗斯方块
个人记录参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipxmq1r
- 此快照首次捕获于
- 2025/12/03 19:37 3 个月前
- 此快照最后确认于
- 2025/12/03 19:37 3 个月前
CPP
#include<bits/stdc++.h>
#include<easyx.h>
#include<graphics.h>
#include<conio.h>
using namespace std;
bool flag;
int block_ready[8];
int mp[25][15];
int s[25];
int form,blockway,block_l,block_r;
pair<int,int> block[5];
bool time_js(int shichang);
void left();
void right();
void down();
void way();
void lr(int ll,int rr);
void ready(int i1,int i2,int i3,int i4,int j1,int j2,int j3,int j4);
signed main(){
srand(time(NULL));
initgraph(350,650,1);
while(1){
BeginBatchDraw();
setlinestyle(PS_SOLID,1);
for(int i=0;i<=10;i++){
line(i*30+25,25,i*30+25,625);
}
for(int i=0;i<=20;i++){
line(25,i*30+25,325,i*30+25);
}
if(flag==0){
for(int i=1;i<=20;i++){
int cnt=0;
for(int j=1;j<=10;j++){
if(mp[i][j]!=0){
cnt++;
}
}
s[i]=cnt;
}
if(s[1]!=0){
EndBatchDraw();
cleardevice();
settextstyle(75,0,"楷体");
outtextxy(350/2-textwidth("GAME OVER")/2,650/2-textheight("GAME OVER")/2,"GAME OVER");
Sleep(3000);
return 0;
}
for(int o=2;o<=20;){
for(int i=1;i<=20;i++){
int cnt=0;
for(int j=1;j<=10;j++){
if(mp[i][j]!=0){
cnt++;
}
}
s[i]=cnt;
}
if(s[o]==10){
for(int j=1;j<=10;j++){
mp[o][j]=0;
}
s[o]=0;
for(int k=o;k>=2;k--){
for(int y=1;y<=10;y++){
mp[k][y]=mp[k-1][y];
}
}
}else{
o++;
}
}
form=3;
if(s[2]!=0) form=1;
blockway=1;
block[1].first=0;
block[1].second=0;
block[2].first=0;
block[2].second=0;
block[3].first=0;
block[3].second=0;
block[4].first=0;
block[4].second=0;
if(s[2]==1) form=1;
switch(form){
case 1:{
block[1].first=1;
block[1].second=rand()%7+1;
for(int i=2;i<=4;i++){
block[i].first=block[1].first;
block[i].second=block[i-1].second+1;
}
break;
}
case 2:{
block[1].first=1;
block[1].second=rand()%9+1;
block[2].first=1;
block[2].second=block[1].second+1;
block[3].first=2;
block[3].second=block[1].second;
block[4].first=2;
block[4].second=block[1].second+1;
break;
}
case 3:{
block[1].first=1;
block[1].second=rand()%8+1;
block[2].first=2;
block[2].second=block[1].second;
for(int i=3;i<=4;i++){
block[i].first=2;
block[i].second=block[i-1].second+1;
}
break;
}
}
for(int i=1;i<=4;i++){
mp[block[i].first][block[i].second]=form;
}
flag=1;
}
if(_kbhit()){
int m=_getch();
switch(m){
case 'w':
case 'W':
case 72:
way();
break;
case 'S':
case 's':
case 80:
down();
break;
case 'A':
case 'a':
case 75:
left();
break;
case 'D':
case 'd':
case 77:
right();
break;
}
}
// if(time_js(300)){
// down();
// }
for(int i=1;i<=20;i++){
int cnt=0;
for(int j=1;j<=10;j++){
switch(mp[i][j]){
case 1:{
setfillcolor(RGB(255,151,125));
break;
}
case 2:{
setfillcolor(RGB(240,250,140));
break;
}
case 3:{
setfillcolor(RGB(179,250,147));
break;
}
case 4:{
setfillcolor(RGB(152,250,250));
break;
}
}
if(mp[i][j]!=0){
solidrectangle(25+(j-1)*30+1,25+(i-1)*30+1,25+j*30-1,25+i*30-1);
}
}
}
EndBatchDraw();
cleardevice();
}
}
bool time_js(int shichang){
static int begin=clock();
if(clock()-begin>=shichang){
begin=clock();
return true;
}
return false;
}
void left(){
for(int i=1;i<=4;i++){
if(block[i].second-1<1){
return ;
}
if(mp[block[i].first][block[i].second-1]!=0){
bool flag_3=0;
for(int j=1;j<=4;j++){
if(block[j].first==block[i].first&&block[j].second==block[i].second-1){
flag_3=1;
break;
}
}
if(flag_3==0){
return ;
}
}
}
for(int i=1;i<=4;i++){
mp[block[i].first][block[i].second]=0;
}
for(int i=1;i<=4;i++){
block[i].second--;
}
for(int i=1;i<=4;i++){
mp[block[i].first][block[i].second]=form;
}
}
void right(){
for(int i=1;i<=4;i++){
if(block[i].second+1>10){
return ;
}
if(mp[block[i].first][block[i].second+1]!=0){
bool flag_3=0;
for(int j=1;j<=4;j++){
if(block[j].first==block[i].first&&block[j].second==block[i].second+1){
flag_3=1;
break;
}
}
if(flag_3==0){
return ;
}
}
}
for(int i=1;i<=4;i++){
mp[block[i].first][block[i].second]=0;
}
for(int i=1;i<=4;i++){
block[i].second+=1;
}
for(int i=1;i<=4;i++){
mp[block[i].first][block[i].second]=form;
}
}
void down(){
for(int i=1;i<=4;i++){
if(block[i].first+1>20){
flag=0;
return ;
}
if(mp[block[i].first+1][block[i].second]!=0){
bool flag_3=0;
for(int j=1;j<=4;j++){
if(block[j].first==block[i].first+1&&block[j].second==block[i].second){
flag_3=1;
break;
}
}
if(flag_3==0){
flag=0;
return ;
}
}
}
for(int i=1;i<=4;i++){
mp[block[i].first][block[i].second]=0;
}
for(int i=1;i<=4;i++){
block[i].first+=1;
}
for(int i=1;i<=4;i++){
mp[block[i].first][block[i].second]=form;
}
}
void way(){
switch(form){
case 1:{
switch(blockway){
case 1:{
ready(-1,0,1,2,1,0,-1,-2);
break;
}
case 2:{
ready(1,0,-1,-2,1,0,-1,-2);
break;
}
case 3:{
ready(1,0,-1,-2,-1,0,1,2);
break;
}
case 4:{
ready(-1,0,1,2,-1,0,1,2);
break;
}
}
break;
}
case 2:{
switch(blockway){
case 1:{
ready(1,2,0,1,1,0,0,-1);
break;
}
case 2:{
ready(1,0,0,-1,-1,-2,0,-1);
break;
}
case 3:{
ready(-1,-2,0,-1,-1,0,0,1);
break;
}
case 4:{
ready(-1,0,0,1,1,2,0,1);
break;
}
}
break;
}
case 3:{
switch(blockway){
case 1:{
ready(0,-1,0,1,2,1,0,-1);
break;
}
case 2:{
ready(2,1,0,-1,0,1,0,-1);
break;
}
case 3:{
ready(0,1,0,-1,-2,-1,0,1);
break;
}
case 4:{
ready(-2,-1,0,1,0,-1,0,1);
break;
}
}
break;
}
}
for(int i=1;i<=4;i++){
if(block[i].first+block_ready[i-1]<1||block[i].first+block_ready[i-1]>20||block[i].second+block_ready[i-1+4]<1||block[i].second+block_ready[i-1+4]>10){
return ;
}
if(mp[block[i].first+block_ready[i-1]][block[i].second+block_ready[i-1+4]]!=0){
bool flag_3=0;
for(int j=1;j<=4;j++){
if(block[j].first==block[i].first+block_ready[i-1]&&block[j].second==block[i].second+block_ready[i-1+4]!=0){
flag_3=1;
break;
}
}
if(flag_3==0){
return ;
}
}
}
for(int i=1;i<=4;i++){
mp[block[i].first][block[i].second]=0;
}
for(int i=1;i<=4;i++){
block[i].first+=block_ready[i-1];
block[i].second+=block_ready[i-1+4];
}
for(int i=1;i<=4;i++){
mp[block[i].first][block[i].second]=form;
}
blockway=(blockway==4?1:blockway+1);
}
void ready(int i1,int i2,int i3,int i4,int j1,int j2,int j3,int j4){
block_ready[0]=i1;
block_ready[1]=i2;
block_ready[2]=i3;
block_ready[3]=i4;
block_ready[4]=j1;
block_ready[5]=j2;
block_ready[6]=j3;
block_ready[7]=j4;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...