/*console 3*3 tris game source
*cmd>type *.cs | findstr formattext
*/
using System;
using System.IO;
using System.Timers;
namespace ____java_is_package
{
class Program
{
public static void Main(string[] args)
{
____tris_overloading_cls nm = new ____tris_overloading_cls();
nm.running();
}
}
class ____tris_overloading_cls
{
//properties
const int TRUE=1;
const int FAIL=0;
const int D_RIGHT=1000;
const int D_LEFT=1001;
const int D_DOWN=1002;
const int MAPY=22;
const int MAPX=22;
const int ARR=3;
const int MAXDESIGN=10;
int xpos,ypos,hyun_design,next_design;
int[,] tris=new int[MAPY,MAPX];
int[,] design=new int[ARR,ARR];
int[,,] realdesign=new int[,,]
{
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
};
Timer tm;
//method
void draw_tris()
{
string formattext="";
string spacetext=" ";
int ii,kk;
for(ii=0; ii<MAPY-1; ii++)
{
formattext=formattext+spacetext;
for(kk=1; kk<MAPX-1; kk++)
{
if(tris[ii,kk]==1) formattext=formattext+"U";
else formattext=formattext+"_";
}
formattext=formattext+"\n";
}
Console.SetCursorPosition(0,0);
Console.Write(formattext);
}
int common_check(int direction)
{
int[,] tris_tmp=new int[MAPY,MAPX];
int ii,kk,ff;
for(ALL)for(ALL)tris_tmp[ii,kk]=tris[ii,kk];
for(ARR)for(ARR)if(design[ii,kk]==1) tris_tmp[ypos+ii,xpos+kk]=0;
if(direction==D_RIGHT) xpos++;
if(xpos+2>MAX-1) xpos--; //Array's MAX-1 Access Possible
if(direction==D_LEFT) xpos--;
if(xpos+0<0) xpos++ //Array's 0 Access Possible
if(direction==D_DOWN) ypos++;
for(ARR)for(ARR)if(design[ii,kk]==1) tris_tmp[ypos+ii,xpos+kk]=1;
ff=0;
for(ARR)for(ARR)if(tris_tmp[ypos+ii,xpos+kk]>1) ff++;
if(ff > 0)
{if(direction==D_RIGHT) xpos--;
if(direction==D_LEFT) xpos++;
if(direction==D_DOWN) ypos--; return(FAIL)}
else
{
for(ALL)for(ALL)tris[ii,kk]=tris_tmp[ii,kk];}
}
return(TRUE);
}
void init()
{
int ii,kk;
tm=new Timer();
tm.Elapsed += new ElapsedEventHandler(____time_tick);
tm.Interval=500;
tm.Start();
for(ALL)for(ALL)tris[ii,kk]=0;
for(ii=0; ii<MAPY; ii++) tris[ii,0]=1; tris[ii,MAPX-1]=1;
for(kk=0; kk<MAPX; kk++) tris[MAPY-1,kk]=1;
xpos=MAPX/2; ypos=0; score=0;
Random rr=new Random(); hyun_design=rr.Next() % MAXDESIGN; next_design=rr.Next() % MAXDESIGN;
for(ARR)for(ARR) design[ii,kk]=realdesign[hyun_design,ii,kk];
for(ARR)for(ARR) tris[ypos+ii,xpos+kk]=design[ii,kk];
Console.Clear(); draw_tris();
}
int enter_check()
{
int ii,kk,rc;
while(true)
{
rc=common_check(D_DOWN);
if(rc==FAIL) break;
draw_tris();
}
while(true)
{
if(check_horizon()==FAIL) break;
}
xpos=MAPX/2; ypos=0;
hyun_design=next_design;
Random rr=new Random(); next_design=rr.Next() % MAXDESIGN;
for(ARR)for(ARR) design=realdesign[hyun_design];
for(ARR)for(ARR) tris[ypos+ii,xpos+kk]=design[ii,kk];
draw_tris();
return(TRUE);
}
void ____time_check(object sender, ElapsedEventArgs e)
{
int ii,kk,rc;
draw_tris();
rc=common_check(D_DOWN);
if(rc==FAIL)
{
if(ypos==0) stop();
else
{
while(true)
{
//no detect!!, while loop break!!
//no detect!!, while loop break!!
if(check_horizon()==FAIL) break;
}
}
xpos=MAPX/2; ypos=0;
hyun_design=next_design;
Random rr=new Random(); next_design=rr.Next() % MAXDESIGN;
for(ARR)for(ARR) design[ii,kk]=realdesign[hyun_design,ii,kk];
for(ARR)for(ARR) tris[ypos+ii,xpos+kk]=design[ii,kk];
}
}
public void running()
{
int rc; ConsoleKeyInfo keyinfo;
init();
while(true)
{
keyinfo=Console.ReadKey(true);
if(keyinfo.Key==ConsoleKey.RightArrow) rc=common_check(D_RIGHT);
if(keyinfo.Key==ConsoleKey.LEFTArrow) rc=common_check(D_LEFT);
if(keyinfo.Key==ConsoleKey.Escape) break;
if(keyinfo.Key==ConsoleKey.Enter) rc=enter_check();
draw_tris();
}
stop();
}
void draw_tris()
{
int ii,kk;
string formattext="";
for(ii=0; ii<MAPY-1; ii++)
{
for(kk=1; kk<MAPX-1; kk++)
{
if(tris[ii,kk]==1) formattext=formattext+"U";
else formattext=formattext+"_";
}
formattext=formattext+"\n";
}
Console.SetCursorPosition(0,0);
Console.Write(formattext);
}
void delete_column(int x, int y)
{
int ii;
for(ii=y; ii>=1; ii--)
{
tris[ii.x]=tris[ii-1,x];
}
}
int check_horizon()
{
int ii,kk,idx,horizon;
horizon=MAPX-3;
for(ii=0; ii<MAPY-1; ii++)
{
idx=0;
for(kk=1; kk<MAPX-2; kk++)
{
if(tris[ii,kk]==tris[ii,kk+1]) idx++;
else break;
}
if(idx==horizon)
{
for(kk=1; kk<MAPX-1; kk++) delete_column(ii,kk);
score++;
return(TRUE);
}
}
return(FAIL);
}
}//end of class
}