ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

学習院理学部化学科★'09入学生コミュのテトリス置いとくね(*´艸`)

  • mixiチェック
  • このエントリーをはてなブックマークに追加
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define SPEED_A 100
#define SPEED_B 10
#define SPEED_C 200
#define SPEED_D 1000
#define TENSUU 5

int timing,ban[12][22],pc[7][4][3][2]={
-2,0,-1,0,1,0, 0,2,0,1,0,-1, -2,0,-1,0,1,0, 0,2,0,1,0,-1,
-1,0,1,0,1,1, 0,1,0,-1,1,-1, 1,0,-1,0,-1,-1, 0,-1,0,1,-1,1,
-1,0,-1,1,0,1,-1,0,-1,1,0,1, -1,0,-1,1,0,1, -1,0,-1,1,0,1,
-1,0,0,1,1,1, 1,-1,0,1,1,0, -1,0,0,1,1,1, 1,-1,0,1,1,0,
-1,1,0,1,1,0, -1,-1,0,1,-1,0,-1,1,0,1,1,0, -1,-1,0,1,-1,0,
1,0,0,1,-1,0, 0,-1,1,0,0,1, -1,0,0,-1,1,0, 0,1,-1,0,0,-1,
-1,1,-1,0,1,0, 1,1,0,1,0,-1, 1,-1,1,0,-1,0, -1,-1,0,-1,0,1,
};
int Inputc(){
int key,ret;
key=INKEY();
do{
ret=key;
if(key==0||key==224){
key=getch();
switch(key){
case 72:ret='5';break;
case 75:ret='4';break;
case 77:ret='6';break;
case 80:ret=' ';break;
defoults :
}
}
key=INKEY();
}while(key!=255);
return(ret);
}
int Dice(int m){
return(m*(double)rand()/((double)RAND_MAX+1.0));
}
int CheckBan(int x,int y,int *pc){
int i,ret;
ret=0;
for(i=0;i<3;i++){
if(ban[x+pc[i*2]][y+pc[i*2+1]]!=0){ret=1;}
}
if(ban[x][y]!=0){ret=1;}
return(ret);
}
void SetBan(int x,int y,int *pc,int np){
int i;
for(i=0;i<3;i++){
ban[x+pc[i*2]][y+pc[i*2+1]]=np;
}
ban[x][y]=np;
}
void Box(int x,int y,int c){
int xx,yy;
xx=(x-1)*8+1;yy=(y-1)*16+2;
G_COLOR(c);
G_LINE(xx,yy,xx+12,yy);
G_LINE(xx+12,yy,xx+12,yy+12);
G_LINE(xx+12,yy+12,xx,yy+12);
G_LINE(xx,yy+12,xx,yy);
G_PAINT(xx+6,yy+6,0,c,c);
}
void SetPc(int x,int y,int *pc,int np){
int i,jx,jy;
for(i=0;i<3;i++){
jx=(x+pc[i*2])*2+28;
jy=y+pc[i*2+1]+2;
Box(jx,jy,np);
}
Box(x*2+28,y+2,np);
}
void PcMove(int *x,int newx,int *y,int newy,int *L,int newL,
int np,int *SW){
int xx,yy,LL;
xx=*x; yy=*y;LL=*L;
SetBan(xx,yy,&pc[np][LL][0],0);
*SW=1;
if(CheckBan(newx,newy,&pc[np][newL][0][0])==0){
SetPc(xx,yy,&pc[np][LL][0][0],0);
xx=newx; yy=newy; LL=newL;
SetPc(xx,yy,&pc[np][LL][0][0],np+1);
*SW=0;
}
SetBan(xx,yy,&pc[np][LL][0][0],np+1);
*x=xx; *y=yy; *L=LL;
}
void Wait(int n){
while(n>0){n--;}
}
int MovePc(int x,int y,int L,int np,int ktime){
int ip[]={1,2,3,0},kaisuu,kswt,SW,key,ret,i,j,k;
SetPc(x,y,&pc[np][L][0][0],np+1);
SetBan(x,y,&pc[np][L][0][0],np+1);
kaisuu=ktime;
kswt=ktime;
while(1){
kaisuu--;
if(kaisuu<0){
kaisuu=kswt;
PcMove(&x,x,&y,y+1,&L,L,np,&SW);
if(SW!=0){break;}
}
Wait(timing);
key=Inputc();
switch(key){
case ' ' :kswt=-1;kaisuu=-1;break;
case '4' :PcMove(&x,x-1,&y,y,&L,L,np,&SW);
break;
case '5' :PcMove(&x,x,&y,y,&L,ip[L],np,&SW);
break;
case '6' :PcMove(&x,x+1,&y,y,&L,L,np,&SW);
break;
defaults :kaisuu=kaisuu+75;
}
}
ret=0;
for(i=20;i>=1;i--){
while(1){
SW=1;
for(j=1;j<=10;j++){
SW=SW*ban[j][i];
}
if(SW==0){break;}
ret++;
for(k=i;k>=2;k--){
for(j=1;j<=10;j++){
if(ban[j][k]!=ban[j][k-1]){
ban[j][k]=ban[j][k-1];
Box(j*2+28,k+2,ban[j][k]);
}
}
}
}
}
return(ret);
}
void Game(){
int i,j,ktimem,ktime,kazu,x,y,L,M,np,mp;
int ten[]={0,10,30,100,500};
char buf[5];
G_CLS();
for(i=1;i<=10;i++)for(j=1;j<=20;j++){
ban[i][j]=0;
}
for(i=0;i<=11;i++){
ban[i][21]=-1;
Box(i*2+28,23,14);
}
for(i=0;i<=20;i++){
ban[0][i]=-1;ban[11][i]=-1;
Box(28,i+2,14);
Box(50,i+2,14);
}
ktime=ktimem=SPEED_D;
kazu=0;
np=Dice(7);
while(1){
sprintf(buf,"%4d",ktime);
printf("今の速さ\t%s\t",buf);
sprintf(buf,"%4d",kazu);
printf("点数\t%s\r",buf);fflush(stdout);
x=5;y=1;L=0;
mp=Dice(7);
if(CheckBan(x,y,&pc[np][L][0][0])!=0){break;}
SetPc(21,2,&pc[mp][0][0][0],mp+1);
M=MovePc(x,y,L,np,ktime);
kazu=kazu+ten[M]+TENSUU;
np=mp;
if(ktime<SPEED_C){
ktime=ktime-1;
if(ktime<0){
ktimem=ktime-SPEED_C;
if(ktimem<SPEED_C){ktimem=SPEED_C;}
ktime=ktimem;
}
}
SetPc(21,2,&pc[mp][0][0][0],0);
}
}
void Initialize(){
int i;
printf("\n\n\t\t\t自作テトリス2009年度版\n\n\n");
printf("\tピースをキーで操作します。\n");
printf("\t4(←):左\n");
printf("\t5(↑):回転\n");
printf("\t6(→):右\n");
printf("\tスペース(↓):落下\n");
printf("\n\n計算機の速さを計測中!!しばらく待ってね\n");
srand(time(NULL));
timing=0;
do{
timing++;rand();
}while(clock()/CLOCKS_PER_SEC<2);
printf("計測が終わりました。 ゲームのレベルを指定して下さい。");
scanf("%d",&i);if(i<1){i=1;}
timing=i*timing/SPEED_A;
}
void main(void){
int i;
Initialize();
G_INIT();
for(i=0;i<20;i++){printf("\n");}
printf("\t\tHit Any Key\n\n");
getch();
Game();
printf("\n\nGame Over\n");
}

コメント(5)

> ゆうさん

いえいえ(^O^)/
これで授業中に遊べるね( ̄ー+ ̄)ぴかぴか(新しい)
> ぼのぼのさん

お役に立てて良かったですわーい(嬉しい顔)

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

学習院理学部化学科★'09入学生 更新情報

学習院理学部化学科★'09入学生のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング