All pastes #631197 Raw Edit

Anonymous

public text v1 · immutable
#631197 ·published 2007-07-23 20:01 UTC
rendered paste body
#include <iostream.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <new.h>
#include <dos.h>
#include <graphics.h>

#define BGI "c:\\bc5\\bgi"

int MaxX,MaxY,x1,y1;
int maxx,minx,maxy,miny,mst,nbt;
int bst,x,y,lb,rb;
int driver,mode;
int i,j,n,ver;
int MaxColor;

struct REGPACK m;

void cpu(int **a , int x , int y , int n );
void proverka(int **a , int x , int y ,int n);
void lb_func(int **a , int ver , int x1 , int y1 );
void setka(int **a , int ver);
void initilize_graph();
void analize( int& , int& , int& );
void m_0(int m_st , int n_but );
void m_show( void );
void m_hide( void );
void m_check( int &but_st , int &x_coord , int &y_coord );
void m_move( int x , int y );
void m_horiz_range( int minx , int maxx );
void m_vert_range( int miny , int maxy );
void m_sens( int senx , int seny );

//----------------------------------------------------------------------------//

void main()
{

do {
		printf("Vvedite n  (  n<3 || n>16 ) --> ");
		cin>>n;
		ver=480/n;
		}  while (n<3 || n>16);

int **a = new int *[n];
	for ( i = 0 ; i <=n ; i++ )
    a[i] = new int [n+1];

initilize_graph();

m_0(mst,nbt);
m_show();
m_sens(0,0);

do
{

m_check(bst,x,y);
analize(bst,lb,rb);
gotoxy(75,2);

setka(a,ver);

if (lb==0&&a[(y/ver)+1][(x/ver)+1]==0) {
	if (x<n*ver){
		lb_func(a , ver ,  x1 ,  y1);

		proverka( a , x , y , n );

		cpu(a , x , y , n );

}}

}while(rb!=0);

restorecrtmode();}

void setka(int **a , int ver)

	{

   char chr[25];
   setcolor(2);

		for ( i = 0 ; i < n ; i++ )
			for ( j = 0 ; j < n ; j++)
				rectangle(i*ver,j*ver,(i+1)*ver-1,(j+1)*ver-1);

      for ( i = 1 ; i <= n ; i++ ){
			for ( j = 1 ; j <= n ; j++){
   			   if (a[i][j]!=0){
                  itoa(a[i][j],chr,10);
                  settextstyle(0,0,(20-n)/2);
                  moveto(j*ver-ver+ver/20,i*ver-ver+ver/10);
      				outtext(chr);
   	}	}		}

   }

////////////////////////////////////////////////////////////////////////////////

void lb_func(int **a , int ver , int x1 , int y1)

	{
   int  ch;
	x1=x/ver;
	y1=y/ver;
	cleardevice();
	setfillstyle(HATCH_FILL, GREEN);
	bar(x1*ver+1, y1*ver+1, x1*ver+ver-2, y1*ver+ver-2);
	x1++;
	y1++;
	do {

	setcolor(2);
		for ( i = 0 ; i < n ; i++ )
			for ( j = 0 ; j < n ; j++)
				rectangle(i*ver,j*ver,(i+1)*ver-1,(j+1)*ver-1);

gotoxy(73,2);
cout<<" k ";
gotoxy(73,3);
cout<<" l ";
gotoxy(73,4);
cout<<" e ";
gotoxy(73,5);
cout<<" t ";
gotoxy(73,6);
cout<<" k ";
gotoxy(73,7);
cout<<" a ";
gotoxy(73,8);
cout<<"  ";
gotoxy(72,9);
cout<<"["<<y1<<"]["<<x1<<"]";
gotoxy(74,10);
cout<<"|";
gotoxy(74,11);
cin>>ch;

	clearviewport ();

	}while(ch<1 || ch>n);

	a[y1][x1]=ch;

   }

////////////////////////////////////////////////////////////////////////////////

void proverka(int **a ,int x , int y , int n )

	{  int i,j,go=0,x2=0,y2=0,k,m;

for(m=1;m<=n;m++){
	for (ii=1;ii<=n;ii++){
		for (jj=1;jj<=n;jj++){
  if (a[ii][jj]=0;{
  a[ii][jj]=m;}
//Proverka po gorizontali rabotaet
  //	for ( i = 1 ; i <= n ; i++ ){
  //  	if ( i!=jj ){
   //   if ( a[ii][i] == a[ii][jj] ){
   //   go=1;}}}

//Proverka vertikali ne rabotaet
  //	for ( i = 1 ; i <=n ; i++ ){
   //	if ( i!=ii ){
   //   if ( a[i][jj] == a[ii][jj] ){
    //  go=1;}}}

//Proverka prav.niz
	for (i=ii+1,j=jj+1; i==n || j==n  ; i++,j++)
		if( a[i][j]==a[ii][jj] )
      go=1;

//Proverka lev.verh
	for (i=ii-1,j=jj-1; i==1 || j==1  ; i--,j--)
		if( a[i][j]==a[ii][j] )
      go=1;

//Proverka lev.niz
	for (i=ii+1,j=jj-1; i==1 || j==1 || i==n || j==n  ; i++,j--)
		if( a[i][j]==a[ii][jj] )
      go=1;

//Proverka prav.verh
	for (i=ii-1,j=jj+1; i==1 || j==1 || i==n || j==n  ; i--,j++)
		if( a[i][j]==a[ii][jj] )
      go=1;

if (go==0){
ii=n;
jj=n
m=n;}
}}}
    	if (go==1){
                 do{
                 settextstyle(0,0,6);
                 moveto(MaxX/2-200,MaxY/2-50);
                 setcolor(random(14)+1);
                 outtext("YOU WIN");
                 delay(500);
                 }while(!kbhit());restorecrtmode();}
 }

////////////////////////////////////////////////////////////////////////////////

void cpu (int **a , int x , int y , int n )

	{ int i,j,go=0,x2=0,y2=0,k,ii,jj;


x2=(x/ver)+1;
y2=(y/ver)+1;

//Proverka po gorizontali rabotaet
  //	for ( i = 1 ; i <= n ; i++ ){
  //  	if ( i!=x2 ){
   //   if ( a[y2][i] == a[y2][x2] ){
   //   go=1;}}}

//Proverka vertikali ne rabotaet
  //	for ( i = 1 ; i <=n ; i++ ){
   //	if ( i!=y2 ){
   //   if ( a[i][x2] == a[y2][x2] ){
    //  go=1;}}}

//Proverka prav.niz
	for (i=y2+1,j=x2+1; i==n || j==n  ; i++,j++)
		if( a[i][j]==a[y2][x2] )
      go=1;

//Proverka lev.verh
	for (i=y2-1,j=x2-1; i==1 || j==1  ; i--,j--)
		if( a[i][j]==a[y2][x2] )
      go=1;

//Proverka lev.niz
	for (i=y2+1,j=x2-1; i==1 || j==1 || i==n || j==n  ; i++,j--)
		if( a[i][j]==a[y2][x2] )
      go=1;

//Proverka prav.verh
	for (i=y2-1,j=x2+1; i==1 || j==1 || i==n || j==n  ; i--,j++)
		if( a[i][j]==a[y2][x2] )
      go=1;

// Viviod GAME OVER
    	if (go==1){
                 do{
                 settextstyle(0,0,6);
                 moveto(MaxX/2-200,MaxY/2-50);
                 setcolor(random(14)+1);
                 outtext("GAME OVER");
                 delay(500);
                 }while(!kbhit());restorecrtmode();}



	}
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

void m_0(int m_st,int n_but)
{m.r_ax=0;
intr(0x33,&m);
m_st=m.r_ax;
n_but=m.r_bx;}

////////////////////////////////////////////////////////////////////////////////

void m_show(void)
{m.r_ax=1;
intr(0x33,&m);}

////////////////////////////////////////////////////////////////////////////////

void m_hide(void)
{m.r_ax=1;
intr(0x33,&m);}

////////////////////////////////////////////////////////////////////////////////

void m_check(int&but_st,int&x_coord,int&y_coord)
{m.r_ax=3;
intr(0x33,&m);
but_st=m.r_bx;
x_coord=m.r_cx;
y_coord=m.r_dx;}

////////////////////////////////////////////////////////////////////////////////

void m_move(int x,int y)
{m.r_ax=4;
m.r_cx=x;
m.r_dx=y;
intr(0x33,&m);}

////////////////////////////////////////////////////////////////////////////////

void m_horiz_range(int minx,int maxx)
{m.r_ax=7;
m.r_cx=minx;
m.r_dx=maxx;
intr(0x33,&m);}

////////////////////////////////////////////////////////////////////////////////

void m_vert_range(int miny,int maxy)
{m.r_ax=8;
m.r_cx=miny;
m.r_dx=maxy;
intr(0x33,&m);}

////////////////////////////////////////////////////////////////////////////////

void m_sens(int senx,int seny)
{m.r_ax=15;
m.r_cx=senx;
m.r_dx=seny;
intr(0x33,&m);}

////////////////////////////////////////////////////////////////////////////////

void analize(int&b_st,int&l_bt,int&r_bt)

{
if((b_st==1)||(b_st==3)||(b_st==5)||(b_st==7))
l_bt=0;
else l_bt=1;
if((b_st==2)||(b_st==3)||(b_st==6)||(b_st==7))
r_bt=0;
else r_bt=1;}

//============================================================================//

void initilize_graph()
	{
    	driver=DETECT;
      mode=0;
      initgraph(&driver,&mode,BGI);
      MaxX=getmaxx();
      MaxY=getmaxy();
   }