C04-调试入门,游戏体验,交互

main与**_tmain**

main函数的原型改变后,argv【0】的输出方式不同了

int main(int argc, char* argv[])
{
 printf("%s", argv[0]);
 return 0;

}

输出的是绝对地址

int _tmain(int argc, _TCHAR* argv[])
{
 printf("%s", argv[0]);
 return 0;
}

_tchar是宽字节是以2字节为一个单位的,如果强行当作char类型解释,则会过早的截断。

调试入门

内存

在这里插入图片描述

内存窗口代表最左边的代表的是内存地址,它们相当于门牌号;
右边的内容代表的是数据(以16进制表示)
内存地址的最少单位 是 1个字节

改源码不可以 改内存可以 因为为内存为即时的
拥有了上帝之手随便改

监视窗口

监视窗口中可以监控任意的C语言合法的变量,直接显示它的值,并且该值,会随着 程序的运行,自动更新。

堆栈窗口

被调用的函数会出现 调用函数的上方

void myfun()
{
 printf("hello world!\r\n");
}
void myfun2()
{
	
 printf("nihaolmj\r\n");
}
int _tmain(int argc, char* argv[])
{
 myfun2();
 myfun();
	
 return 0;

}

在这里插入图片描述

断点 单步步入 单步步过

断点 是中断的意思,拦路虎,即,程序执行的过程中会被断下来

堆栈窗口 记录了函数的调用关系,通过双击堆栈的各个函数,可以确定函数调用的位置

调试是分水岭

如果不懂 就统统F11 总有一天会顿悟的

小游戏互动

贪吃蛇
我们要考虑的游戏只是雏形阶段

  • 围栏
  • 蛇本身
  • 移动
    围栏用二维数组
    移动用getchar()获得用户输入
    蛇本身 存储坐标信息
#include "stdafx.h"
#include<stdlib.h>
#include<time.h>
#include"setdisplay.h"
#include"conio.h"
#define GAME_ROW 16
#define GAME_COL 16

char g_BackGround[GAME_ROW][GAME_COL] = { 0 };
int g_nRow = 7;
int	g_nCol = 7;

void Show_Over()
{
 char* str = \
  "□□□□■■■■■■□□□□□□□□□□■□□□□□□□□□□□□□□□□□■□□□□□□□□□■□□□□□□□□□■■■■■■■■■■■□\n"
  "□□□■□□□□□□□□□□□□□□□■□■□□□□□□□□□□□□□□□■□■□□□□□□□■□■□□□□□□□□■□□□□□□□□□□□\n"
  "□□■□□□□□□□□□□□□□□□■□□□■□□□□□□□□□□□□□■□□□■□□□□□■□□□■□□□□□□□■□□□□□□□□□□□\n"
  "□■□□□□□□□□□□□□□□□■□□□□□■□□□□□□□□□□□■□□□□□■□□□■□□□□□■□□□□□□■□□□□□□□□□□□\n"
  "□■□□□□□□□□□□□□□□■■■■■■■■■□□□□□□□□□■□□□□□□□■□■□□□□□□□■□□□□□■■■■■■■■■■■□\n"
  "□■□□□□□■■■■□□□□■□□□□□□□□□■□□□□□□□■□□□□□□□□□■□□□□□□□□□■□□□□■□□□□□□□□□□□\n"
  "□■□□□□□■□□■□□□■□□□□□□□□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□■□□□■□□□□□□□□□□□\n"
  "□□■□□□□□□□■□□■□□□□□□□□□□□□□■□□□■□□□□□□□□□□□□□□□□□□□□□□□■□□■□□□□□□□□□□□\n"
  "□□□■■■■■■■■□■□□□□□□□□□□□□□□□■□■□□□□□□□□□□□□□□□□□□□□□□□□□■□■■■■■■■■■■■□\n"
  "□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□\n"
  "□□□□■■■■□□□□■□□□□□□□□□□□□□□□■□□□□□□■■■■■■■■■■■■■■■□□□□□□□□■□□□□■■■■□□□\n"
  "□□□■□□□□■□□□□■□□□□□□□□□□□□□■□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□■□□□■□□□□■□□\n"
  "□□■□□□□□□■□□□□■□□□□□□□□□□□■□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□■□□■□□□□□□■□\n"
  "□■□□□□□□□□■□□□□■□□□□□□□□□■□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□■□■□□□□□□□□□\n"
  "□■□□□□□□□□■□□□□□■□□□□□□□■□□□□□□□□□□■■■■■■■■■■■■■■■□□□□□□□□■■□□□□□□□□□□\n"
  "□■□□□□□□□□■□□□□□□■□□□□□■□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□\n"
  "□□■□□□□□□■□□□□□□□□■□□□■□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□\n"
  "□□□■□□□□■□□□□□□□□□□■□■□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□\n"
  "□□□□■■■■□□□□□□□□□□□□■□□□□□□□□□□□□□□■■■■■■■■■■■■■■■□□□□□□□□■□□□□□□□□□□□\n";

 WriteChar(18, 0,
  str,
  SetConsoleColor(COLOR_YELLOW, COLOR_WHITE));
}


void BackGround()
{
 for (size_t nRow= 0; nRow<GAME_ROW; nRow++)
 {
  for (size_t nCol = 0; nCol < GAME_COL; nCol++)
  {
   if (nRow == 0 ||
    nCol == 0 ||
    nCol == GAME_COL - 1 ||
    nRow == GAME_ROW - 1)
   {
    g_BackGround[nRow][nCol] = 1;
   }
   else
   {
    g_BackGround[nRow][nCol] = 0;
   }
  }
 }
}
void ShowBackGround()
{
 for (size_t nRow = 0; nRow < GAME_ROW; nRow++)
 {
  for (size_t nCol = 0; nCol < GAME_COL; nCol++)
  {
   if (g_BackGround[nRow][nCol]==1)
   {
    WriteChar(nRow, nCol, "■", SetConsoleColor(COLOR_YELLOW, COLOR_WHITE));
   }
   else
   {
    WriteChar(nRow, nCol, "□", SetConsoleColor(COLOR_YELLOW, COLOR_WHITE));
   }
  }

 }
}
int IsCanMove(int nRows, int nCols)
{
 if (g_BackGround[nRows][nCols] == 1)
 {
  Show_Over();
  return 0;
 }
 else
 {
  
  return 1;
 }

}

void Show_Snake()
{
 WriteChar(g_nRow, g_nCol, "蛇", SetConsoleColor(COLOR_RED, COLOR_WHITE));
}

void Show_All()
{
 system("cls");
 ShowBackGround();
 Show_Snake();
}


void Snake_Run()
{
 char cInput = 0;
 while (1)
 {
  cInput = _getch();
  switch (cInput)
  {
  case'a':
   if (IsCanMove(g_nRow, g_nCol - 1))
   {
    g_nCol--;
    Show_All();

   }
   break;
  case'w':
   if (IsCanMove(g_nRow + 1, g_nCol))
   {
    g_nRow++;
    Show_All();

   }
   break;
  case'd':
   if (IsCanMove(g_nRow, g_nCol + 1))
   {
    g_nCol++;
    Show_All();

   }
   break;
  case's':
   if (IsCanMove(g_nRow + 1, g_nCol))
   {
    g_nRow++;
    Show_All();

   }
   break;

  default:
   break;
  }
 }
}
int main(int argc, char * argv[])
{
 BackGround();
 ShowBackGround();
 Show_Snake();
 Snake_Run();
	

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值