zlh 发表于 2015-11-5 07:19:29

问题求助!!!【前十位有鱼币!!】

我编写了一个要输入密码的程序,还编写了一个俄罗斯方块的程序。我想要做到在输入密码后进入俄罗斯方块,请问要怎么做?
(附上源码)
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>


#define STACK_INIT_SIZE 10
#define OK 1
#define TRUE 1
#define FALSE0
#define ERROR 0
char PASSWORD="123456";
typedef char SElemType;
typedef struct STACK
{
        SElemType *base;
        SElemType *top;
        int stacksize;
        int length;
}SqStack,*Stack;
typedef int Status;

void gotoxy(int x,int y)    //因为VC中没有gotoxy这个命令,所以定义一个子程序来代替他
{
    COORD coord;
    coord.X=x;
    coord.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

void InitStack(Stack *S)
{
        *S=(SqStack *)malloc(sizeof(SqStack));
    (*S)->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
        if(!(*S)->base)exit(-1);
        (*S)->top=(*S)->base;
        (*S)->stacksize=STACK_INIT_SIZE;
        (*S)->length=0;
}

Status DestroyStack(Stack *S)
{
        free((*S)->base);
        free((*S));
        return OK;

}
void ClearStack(Stack *S)
{
        (*S)->top=(*S)->base;
        (*S)->length=0;
}
Status StackEmpty(SqStack S)
{
        if(S.top==S.base) return TRUE;
        else
                return FALSE;
}
void Push(Stack *S,SElemType e)
{
        if((*S)->top - (*S)->base>=(*S)->stacksize)
        {
                (*S)->base=(SElemType *) realloc((*S)->stacksize,
                  ((*S)->stacksize + 2) * sizeof(SElemType));
                if(!(*S)->base)exit(-1);
                (*S)->top=(*S)->base+(*S)->stacksize;
                (*S)->stacksize += 2;
        }
        *((*S)->top++)=e;
    ++(*S)->length;
}
Status Pop(Stack *S)
{
        if((*S)->top==(*S)->base) return ERROR;
        (*S)->top--;
        --(*S)->length;
        return OK;
}
Status GetTop(Stack S,SElemType *e)
{
        if(S->top==S->base) return ERROR;
        *e=*(S->top-1);
        S->top--;
}
void Change(SqStack S,char *a)
{
        int n=S.length-1;
        while (!StackEmpty(S))
                GetTop(&S,&a);
}
void Control(Stack *s)
{
        int i=0,k,j=0;
        SElemType ch,*a;
        k=strlen(PASSWORD);
    printf("输入密码,你有三次机会:\n",k);
        for(;;)
        {
                if(i>=3)
                {
                        i++;
                        system("cls");
                        gotoxy(1,1);
                        break;
                }
                else if(i>0&&i<3)
                {
                        gotoxy(5,2);
                        for(j-1;j<=(*s)->length;j++)printf(" ");
                        gotoxy(5,2);ClearStack(s);
                }
                for(;;)
                {
                        ch=getch();
                        if(ch!=13)
                        {
                                if(ch==8)
                                {
                                        Pop(s);
                                        gotoxy(4+j,2);
                                        printf(" ");
                                        gotoxy(4+j,2);
                                }
                                else
                                {
                                        printf("*");
                                        Push(s,ch);
                                }
                                j=(*s)->length;
                        }
                        else break;
                }
                i++;
                if(k!=j) continue;
                else
                {
                        a=(SElemType *)malloc((*s)->length*sizeof(SElemType));

                }
                Change(**s,a);
                for(j=1;j<=(*s)->length;)
                {
                        if(a==PASSWORD) j++;
                        else
                        {
                                j=(*s)->length+2;break;
                        }
                }
          if(j==(*s)->length+2) continue;
                else break;
        }
    if(i==4) printf("\n 密码错误!");
        else printf("\n 密码正确!");
        free(a);
}
main()
{
        Stack s;
        system("cls");
        InitStack(&s);
        Control(&s);
        getch();
        DestroyStack(&s);
}


下面是俄罗斯方块的
#include <windows.h>
#include <stdio.h>
#include <time.h>

#define CELL 20
#define ROWS 25
#define COLS 15
//升级所需分数值
#define SCORE_LEVEL_INC 80
#define ID_TIMER 1

/////////////////全局变量/////////////////////////////
HWND hwnd;                  //保存窗口句柄

int score=0;                //分数
int level=0;                //级数
int interval_unit=25;       //随级数递增的时间间隔增量
int interval_base=300;      //时间间隔基量
int old_interval;         //保存当前的时间间隔,用于加速操作

int cur_left,cur_top;       //记录方块当前的位置
int width_block,height_block;   //方块的宽带和高度

bool isPause=false;             //暂停标识
UINT timer_id=0;                //保存计时器ID

static byte *block=NULL;      //方块,方块为随机大小,采用动态分配内存方式,所以这里是指针变量
byte g_panel={0};
////////////////////////////////////////////////////
LRESULT CALLBACK WndProc ( HWND,UINT,WPARAM,LPARAM );
void DrawPanel ( HDC hdc );   //绘制表格
void RefreshPanel ( HDC hdc );      //刷新面板
void DoDownShift ( HDC hdc );       //下移
void DoLeftShift ( HDC hdc );       //左移
void DoRightShift ( HDC hdc );      //右移
void DoAccelerate ( HDC hdc );      //加速
void DoRedirection ( HDC hdc ); //改变方向
void ClearRow ( HDC hdc );          //消行
bool ExportBlock();   //输出方块,
//该函数会直接修改全局变量block,width_block,height_block,
//cur_left和cur_top
bool IsTouchBottom ( HDC hdc );         //判断是否到达底部

int main()
{
    HINSTANCE hInstance=GetModuleHandle ( NULL );
    TCHAR szAppName[]=TEXT ( "teris" );
    MSG msg;
    WNDCLASS wc;

    wc.style=CS_HREDRAW|CS_VREDRAW;
    wc.lpfnWndProc=WndProc;
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.hInstance=hInstance;
    wc.hIcon=LoadIcon ( NULL,IDI_APPLICATION );
    wc.hCursor=LoadCursor ( NULL,IDC_ARROW );
    wc.hbrBackground= ( HBRUSH ) GetStockObject ( WHITE_BRUSH );
    wc.lpszMenuName=NULL;
    wc.lpszClassName=szAppName;
    if ( !RegisterClass ( &wc ) )
    {
      printf ( "RegisterClass occur errors!" );
      return 0;
    }
    hwnd=CreateWindow ( szAppName,TEXT ( "Teris Demo" ),
                        WS_OVERLAPPEDWINDOW,
                        0,0,0,0,
                        NULL,
                        NULL,
                        hInstance,
                        NULL );
    ShowWindow ( hwnd,SW_SHOW );
    UpdateWindow ( hwnd );
    while ( GetMessage ( &msg,NULL,0,0 ) )
    {
      TranslateMessage ( &msg );
      DispatchMessage ( &msg );
    }
    return msg.wParam;
}

void DrawPanel ( HDC hdc )          //绘制游戏面板
{
    int x,y;
    RECT rect;

    for ( y=0; y<ROWS; y++ )
    {
      for ( x=0; x<COLS; x++ )
      {
            //计算方块的边框范围
            rect.top=y*CELL+1;
            rect.bottom= ( y+1 ) *CELL-1;
            rect.left=x*CELL+1;
            rect.right= ( x+1 ) *CELL-1;
            FrameRect ( hdc,&rect, ( HBRUSH ) GetStockObject ( BLACK_BRUSH ) );
      }
    }
}

void DoDownShift ( HDC hdc )      //下移
{
    if ( NULL==block ) return;

    //判断是否到达底部
    if ( IsTouchBottom ( hdc ) )    //到底部
    {
      //消行处理
      ClearRow ( hdc );
      ExportBlock();      //输出下一个方块
    }

    cur_top++;
    RefreshPanel ( hdc );
}

void DoLeftShift ( HDC hdc )      //左移
{
    int x,y;
    if ( NULL==block ) return;

    if ( 0==cur_left ) return;
    if ( cur_top<0 ) return; //方块没有完整显示前,不能左移
    for ( y=0; y<height_block; y++ )
    {
      for ( x=0; x<width_block; x++ )          //从左边开始扫描,获取该行最左边的实心方格块
      {
            if ( * ( block+y*width_block+x ) )
            {
                //判断当前方格在面板上面左边一个方格是否为实心,是就代表不能再左移
                if ( g_panel ) return;

                break;      //只判断最左边的一个实心方格,之后直接扫描下一行
            }
      }
    }
    cur_left--;
    RefreshPanel ( hdc );
}

void DoRightShift ( HDC hdc )       //右移
{
    int x,y;
    if ( NULL==block ) return;

    if ( COLS-width_block==cur_left ) return;
    if ( cur_top<0 ) return;   //方块完整显示前不能右移
    for ( y=0; y<height_block; y++ )
    {
      for ( x=width_block-1; x>=0; x-- )   //从右边开始扫描,获取该行最右边的实心方格块
      {
            if ( * ( block+y*width_block+x ) )
            {
                //判断当前方格在面板上右边一个方格是否为实心,是就代表不能再右移
                if ( g_panel ) return;

                break;      //只判断最右边的一个实心方格
            }
      }
    }
    cur_left++;
    RefreshPanel ( hdc );
}

void DoRedirection ( HDC hdc )      //改变方向
{
    int i,j;
    byte * temp=NULL;
    if ( NULL==block ) return;
    if ( cur_top<0 ) return;   //方块完整显示前不能转向

    temp= ( byte * ) malloc ( sizeof ( byte ) *width_block*height_block );
    for ( i=0; i<width_block; i++ )
    {
      for ( j=0; j<height_block; j++ )
      {
            //temp=block;
            * ( temp+i*height_block+j ) =* ( block+ ( height_block-j-1 ) *width_block+i );
      }
    }

    //给方块重新定位
    int incHeight=width_block-height_block;
    int incWidth=height_block-width_block;
    int temp_cur_top=cur_top-incHeight/2;
    int temp_cur_left=cur_left-incWidth/2;

    //system("cls");
    //printf("temp_top=%d, temp_left=%d",temp_cur_top,temp_cur_left);

    //判断当前空间是否足够让方块改变方向
    int max_len=max ( width_block,height_block );
    //防止下标访问越界
    if ( temp_cur_top+max_len-1>=ROWS||temp_cur_left<0||temp_cur_left+max_len-1>=COLS )
    {
      free ( temp );      //退出前必须先释放内存
      return;
    }
    for ( i=0; i<max_len; i++ )
    {
      for ( j=0; j<max_len; j++ )
      {
            //转向所需的空间内有已被占用的实心方格存在,即转向失败
            if ( g_panel )
            {
                free ( temp );      //退出前必须先释放内存
                return;
            }
      }
    }

    //把临时变量的值赋给block,只能赋值,而不能赋指针值
    for ( i=0; i<height_block; i++ )
    {
      for ( j=0; j<width_block; j++ )
      {
            //block=temp;
            * ( block+i*width_block+j ) =* ( temp+i*width_block+j );
      }
    }

    //全局变量重新被赋值
    cur_top=temp_cur_top;
    cur_left=temp_cur_left;
    //交换
    i=width_block;
    width_block=height_block;
    height_block=i;

    free ( temp );      //释放为临时变量分配的内存
    RefreshPanel ( hdc );
}

void DoAccelerate ( HDC hdc )       //加速
{
    if ( NULL==block ) return;

    if ( IsTouchBottom ( hdc ) )
    {
      //消行处理
      ClearRow ( hdc );
      ExportBlock();
    }
    cur_top++;
    RefreshPanel ( hdc );
}

bool IsTouchBottom ( HDC hdc )
{
    int x,y;
    int i,j;

    if ( NULL==block ) return false;
    if ( ROWS==cur_top+height_block )
    {
      //固定方块
      for ( i=0; i<height_block; i++ )
      {
            for ( j=0; j<width_block; j++ )
            {
                if ( * ( block+i*width_block+j ) ) g_panel=1;
            }
      }
      return true;
    }
    for ( y=height_block-1; y>=0; y-- )          //从底行开始扫描
    {
      //判断第一个实心方块在面板上邻接的下方方格是否为实心,是就代表已经到达底部
      for ( x=0; x<width_block; x++ )
      {
            if ( * ( block+y*width_block+x ) )
            {
                if ( cur_top+y+1<0 ) return false;
                if ( g_panel )
                {
                  //判断是否gameover
                  if ( cur_top<=0 )
                  {
                        if ( timer_id )
                        {
                            KillTimer ( hwnd,ID_TIMER );
                            timer_id=0;
                        }
                        MessageBox ( hwnd,TEXT ( "游戏结束" ),TEXT ( "MSG" ),MB_OK|MB_ICONEXCLAMATION );
                        SendMessage ( hwnd,WM_CLOSE,0,0 );
                  }
                  //
                  //固定方块
                  for ( i=0; i<height_block; i++ )
                  {
                        for ( j=0; j<width_block; j++ )
                        {
                            if ( * ( block+i*width_block+j ) ) g_panel=1;
                        }
                  }
                  return true;
                }
            }
      }
    }
    return false;
}

void ClearRow ( HDC hdc )               //消行
{
    int i,j,k;
    int count=0;      //消行次数
    bool isFilled;
    //消行处理
    for ( i=ROWS-1; i>=0; i-- )
    {
      isFilled=true;
      for ( j=0; j<COLS; j++ )
      {
            if ( !g_panel )
            {
                isFilled=false;
                break;
            }
      }
      if ( isFilled )
      {
            for ( j=0; j<COLS; j++ )
            {
                g_panel=0;
            }
            //所有方块往下移
            for ( k=i-1; k>=0; k-- )
            {
                for ( j=0; j<COLS; j++ )
                {
                  g_panel=g_panel;
                }
            }
            i=i+1;
            count++;
      }
    }

    //最高级别为9级,所以分数极限为(9+1)*SCORE_LEVEL_INC-1
    if ( score>=10*SCORE_LEVEL_INC-1 ) return;

    //加分规则:消除行数,1行加10分,2行加15分,3行加20分,4行加30分
    switch ( count )
    {
    case 1:
      score+=10;
      break;
    case 2:
      score+=15;
      break;
    case 3:
      score+=20;
      break;
    case 4:
      score+=30;
      break;
    }

    int temp_level=score/SCORE_LEVEL_INC;
    if ( temp_level>level )
    {
      level=temp_level;
      //撤销当前计时器,然后重设
      if ( timer_id ) KillTimer ( hwnd,ID_TIMER );
      timer_id=SetTimer ( hwnd,ID_TIMER,interval_base-level*interval_unit,NULL );
    }

    system ( "cls" );
    printf ( "score: %d, level: %d ",score,level );
}

void RefreshPanel ( HDC hdc )         //刷新面板
{
    int x,y;
    RECT rect;
    HBRUSH h_bSolid= ( HBRUSH ) GetStockObject ( GRAY_BRUSH ),
                     h_bEmpty= ( HBRUSH ) GetStockObject ( WHITE_BRUSH );
    if ( NULL==block ) return;

    //先刷屏
    for ( y=0; y<ROWS; y++ )
    {
      for ( x=0; x<COLS; x++ )
      {
            //为避免刷掉方块的边框,rect范围必须比边框范围小1
            rect.top=y*CELL+2;
            rect.bottom= ( y+1 ) *CELL-2;
            rect.left=x*CELL+2;
            rect.right= ( x+1 ) *CELL-2;
            if ( g_panel )
                FillRect ( hdc,&rect,h_bSolid );
            else
                FillRect ( hdc,&rect,h_bEmpty );
      }
    }
    //再定位方块
    for ( y=0; y<height_block; y++ )
    {
      for ( x=0; x<width_block; x++ )
      {
            if ( * ( block+y*width_block+x ) )          //实心
            {
                rect.top= ( y+cur_top ) *CELL+2;
                rect.bottom= ( y+cur_top+1 ) *CELL-2;
                rect.left= ( x+cur_left ) *CELL+2;
                rect.right= ( x+cur_left+1 ) *CELL-2;
                FillRect ( hdc,&rect,h_bSolid );
            }
      }
    }
}

bool ExportBlock()          //输出方块
{
    int sel;
    if ( block )
    {
      free ( block );   //释放之前分配的内存
      block=NULL;
    }

    sel=rand() %7;
    switch ( sel )
    {
    case 0:   //水平条
      width_block=4;
      height_block=1;
      block= ( byte * ) malloc ( sizeof ( byte ) *width_block*height_block );
      * ( block+0 ) =1;       //可以理解为*(block+0*width_block+0)=1,即第一行的第一个方格,下面同理
      * ( block+1 ) =1;       //*(block+0*width_block+1)=1
      * ( block+2 ) =1;       //*(block+0*width_block+2)=1
      * ( block+3 ) =1;       //*(block+0*width_block+3)=1

      cur_top=0-height_block;
      cur_left= ( COLS-width_block ) /2;
      break;
    case 1:   //三角
      width_block=3;
      height_block=2;
      block= ( byte * ) malloc ( sizeof ( byte ) *width_block*height_block );
      * ( block+0 ) =0;       //可以理解为*(block+0*width_block+0)=0,即第一行的第一个方格,下面同理
      * ( block+1 ) =1;       //*(block+0*width_block+1)=1
      * ( block+2 ) =0;       //*(block+0*width_block+2)=0
      * ( block+3 ) =1;       //*(block+1*width_block+0)=1,第二行开始
      * ( block+4 ) =1;       //*(block+1*width_block+1)=1
      * ( block+5 ) =1;       //*(block+1*width_block+2)=1

      cur_top=0-height_block;
      cur_left= ( COLS-width_block ) /2;
      break;
    case 2:   //左横折
      width_block=3;
      height_block=2;
      block= ( byte * ) malloc ( sizeof ( byte ) *width_block*height_block );
      * ( block+0 ) =1;       //可以理解为*(block+0*width_block+0)=1,下面同理
      * ( block+1 ) =0;       //*(block+0*width_block+1)=0
      * ( block+2 ) =0;       //*(block+0*width_block+2)=0
      * ( block+3 ) =1;       //*(block+1*width_block+0)=1
      * ( block+4 ) =1;       //*(block+1*width_block+1)=1
      * ( block+5 ) =1;       //*(block+1*width_block+2)=1

      cur_top=0-height_block;
      cur_left= ( COLS-width_block ) /2;
      break;
    case 3:   //右横折
      width_block=3;
      height_block=2;
      block= ( byte * ) malloc ( sizeof ( byte ) *width_block*height_block );
      * ( block+0 ) =0;       //可以理解为*(block+0*width_block+0)=0,下面同理
      * ( block+1 ) =0;       //*(block+0*width_block+1)=0
      * ( block+2 ) =1;       //*(block+0*width_block+2)=1
      * ( block+3 ) =1;       //*(block+1*width_block+0)=1
      * ( block+4 ) =1;       //*(block+1*width_block+1)=1
      * ( block+5 ) =1;       //*(block+1*width_block+2)=1

      cur_top=0-height_block;
      cur_left= ( COLS-width_block ) /2;
      break;
    case 4:   //左闪电
      width_block=3;
      height_block=2;
      block= ( byte * ) malloc ( sizeof ( byte ) *width_block*height_block );
      * ( block+0 ) =1;       //可以理解为*(block+0*width_block+0)=1,下面同理
      * ( block+1 ) =1;       //*(block+0*width_block+1)=1
      * ( block+2 ) =0;       //*(block+0*width_block+2)=0
      * ( block+3 ) =0;       //*(block+1*width_block+0)=0
      * ( block+4 ) =1;       //*(block+1*width_block+1)=1
      * ( block+5 ) =1;       //*(block+1*width_block+2)=1

      cur_top=0-height_block;
      cur_left= ( COLS-width_block ) /2;
      break;
    case 5:   //右闪电
      width_block=3;
      height_block=2;
      block= ( byte * ) malloc ( sizeof ( byte ) *width_block*height_block );
      * ( block+0 ) =0;       //可以理解为*(block+0*width_block+0)=0,下面同理
      * ( block+1 ) =1;       //*(block+0*width_block+1)=1
      * ( block+2 ) =1;       //*(block+0*width_block+2)=1
      * ( block+3 ) =1;       //*(block+1*width_block+0)=1
      * ( block+4 ) =1;       //*(block+1*width_block+1)=1
      * ( block+5 ) =0;       //*(block+1*width_block+2)=0

      cur_top=0-height_block;
      cur_left= ( COLS-width_block ) /2;
      break;
    case 6:   //石头
      width_block=2;
      height_block=2;
      block= ( byte * ) malloc ( sizeof ( byte ) *width_block*height_block );
      * ( block+0 ) =1;       //可以理解为*(block+0*width_block+0)=1,下面同理
      * ( block+1 ) =1;       //*(block+0*width_block+1)=1
      * ( block+2 ) =1;       //*(block+1*width_block+0)=1
      * ( block+3 ) =1;       //*(block+1*width_block+1)=1

      cur_top=0-height_block;
      cur_left= ( COLS-width_block ) /2;
      break;
    }
    return block!=NULL;
}

LRESULT CALLBACK WndProc ( HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam )
{
    HDC hdc;
    PAINTSTRUCT ps;
    //TCHAR szBuffer;

    switch ( message )
    {
    case WM_CREATE:
      MoveWindow ( hwnd,400,10,CELL*COLS+8,CELL*ROWS+32,FALSE );      //补齐宽度和高度
      srand ( time ( NULL ) );
      ExportBlock();

      timer_id=SetTimer ( hwnd,ID_TIMER,interval_base-level*interval_unit,NULL );
      return 0;
    case WM_TIMER:
      hdc=GetDC ( hwnd );
      DoDownShift ( hdc );
      ReleaseDC ( hwnd,hdc );
      return 0;
    case WM_KEYDOWN:
      hdc=GetDC ( hwnd );
      switch ( wParam )
      {
      case VK_LEFT:                           //左移
            if ( !isPause ) DoLeftShift ( hdc );
            break;
      case VK_RIGHT:                        //右移
            if ( !isPause ) DoRightShift ( hdc );
            break;
      case VK_UP:                           //转向
            if ( !isPause ) DoRedirection ( hdc );
            break;
      case VK_DOWN:                           //加速
            if ( !isPause ) DoAccelerate ( hdc );
            break;
      case VK_SPACE:      //暂停
            isPause=!isPause;
            if ( isPause )
            {
                if ( timer_id ) KillTimer ( hwnd,ID_TIMER );
                timer_id=0;
            }
            else
            {
                timer_id=SetTimer ( hwnd,ID_TIMER,interval_base-level*interval_unit,FALSE );
            }
            break;
      }
      ReleaseDC ( hwnd,hdc );
      return 0;
    case WM_PAINT:
      hdc=BeginPaint ( hwnd,&ps );
      DrawPanel ( hdc );          //绘制面板
      RefreshPanel ( hdc );       //刷新
      EndPaint ( hwnd,&ps );
      return 0;
    case WM_DESTROY:
      if ( block ) free ( block );
      if ( timer_id ) KillTimer ( hwnd,ID_TIMER );
      PostQuitMessage ( 0 );
      return 0;
    }
    return DefWindowProc ( hwnd,message,wParam,lParam );
}


求大神解析

zlh 发表于 2015-11-5 07:20:18

先占楼

machimilk 发表于 2015-11-5 12:40:18

首先把2个程序的代码复制到一起,看看有没有变量和define冲突,然后把俄罗斯方块的main函数改名,比如叫tetrismain(),然后在密码程序里面把 if(i==4) printf("\n 密码错误!");这句改成 if(i==4) tetrismain();
如果有函数位置问题就做前向声明

cccp 发表于 2015-11-5 12:51:59

先回帖

roar123 发表于 2015-11-5 19:29:56

先回{:5_91:}

梦神的日记 发表于 2015-11-5 19:33:23

先回帖

Sakura 发表于 2015-11-5 20:37:55

先回帖

zqzq 发表于 2015-11-5 22:31:58

既然有了回答那我 恬不知耻的要个币

YjingA 发表于 2015-11-6 08:05:23

很给力的哈!

langzi23 发表于 2015-11-6 08:59:42

太多了 俺看着头晕

溯月0503 发表于 2015-11-6 08:59:54

赞一个楼主给力呀

竹林小溪 发表于 2015-11-6 12:06:45

两段代码复制到一起,并且把两个main函数合到一起,比如把第一个main中的代码加入到第二个中,然后改下定义、变量什么的,这应该没什么问题吧。

wzy997991067 发表于 2015-11-6 12:57:38

..............

dwer 发表于 2015-11-6 14:31:46

两个工程的,在主exe里验证密码,密码正确通过WinExec 或者 CreateProcess 调用俄罗斯方块的exe,

alyao 发表于 2015-11-7 16:07:19

先回帖

YjingA 发表于 2015-11-8 09:04:24


先回帖

iloveit 发表于 2015-11-8 10:08:24

我没用纯代码写过俄罗斯方块,但是用过qt写过一个登陆程序。主要是这个思路,首先有两个界面,登陆界面输入密码,然后取出数据判断账号密码是否正确,不正确就return返回;正确就销毁登陆窗口,进入主界面。因为是界面是直接画的,很方便。纯代码写没试过,头痛

hiwch 发表于 2015-11-8 14:10:58

绝对力挺

DAY 发表于 2015-11-8 22:57:14

晕晕

tmkuej 发表于 2015-11-9 12:15:23


太多了 俺看着头晕
页: [1] 2
查看完整版本: 问题求助!!!【前十位有鱼币!!】