为这个程序花了我三天(当然不是24小时拉呵呵),由于很久没有编程了,所以拿这个小游戏练习一下,让大家见笑了,我觉得自己在程序逻辑方面处理的还可以,但是结构上由于经验不足还是有很多不足之处,而且由于是简单的利用windows api来编程,画面效果可想而知了。我敢于把这个程序贴出来,就算是为了自己开博放个炮仗吧,虽然“声音”小了点。。。

还是来说说我的程序,编程前我试着写了个游戏文档,算是用来指导一下自己的后续行动吧,具体如下:

                                                                                  贪吃蛇游戏文档

1.  游戏描述:该游戏属于既可以单人游戏也可以双人对战的动作游戏。

 

2.  单人游戏规则

1)  移动规则:蛇可以向四个方向移动,但是方向不能瞬间移动到相反的方向。

2)  米的出现规则:米在随机在场景中生成。

3)  增长长度规则:蛇一旦吃到米,就增长长度。

4)  失败条件:蛇一旦碰到场景的墙壁,或者蛇头碰到蛇身即告死亡。

5)  胜利条件:吃米吃到一定程度就可以胜利。

 

3.  双人游戏规则

1)  移动规则:与单人游戏相同。

2)  米的出现规则:与单人游戏相同。

3)  增长长度规则:与单人游戏相同。

4)  失败条件:蛇一旦碰到场景的墙壁,或者蛇头碰到蛇身即告死亡,己方蛇头碰到对方蛇身也告死亡。

5)  胜利条件:一方吃米比另一方先到某一程度就可以胜利。

 

4.设计进程

a.单人游戏设计

1)场景的设计

为了方便实现,我采用蛇与场景网格匹配的设计,也就是以蛇的单节size为单位来对场景进行分割。我设计场景大小为400*300,蛇的size10*10,也就是说场景被分割成40*30=1200格。而蛇的行动一次行进一格。

2)蛇的建模

首先我设计蛇的前进为以格子为单位的前进方式,而蛇的单节大小也与格子匹配,那么我就设计一个队列来作为蛇的模型,而蛇的前进方式也是以队列进出的方式来实现,这是很好理解的,因为每一次渲染都是依次读取蛇的每一节并绘图,那么当蛇行进到下一步时,必然是最后一格的蛇尾消失,而蛇头根据既定方向来到下一格的位置上,正好可以将蛇头作为队尾,蛇头作为队头,进行头进尾出操作。

3)蛇的渲染

其余诸如米与场景的渲染比较简单,所以这里就单论蛇的渲染,从上文可知我把蛇的设计成为一个队列,而蛇的运动通过队列的出入队来实现,队列的入队操作负责控制整个蛇身的运动方向,同时也可以将蛇头的运动轨迹依次传送到蛇尾,而出队操作则负责蛇的长度显示。

蛇的绘图则可以通过依次读取蛇身所在格子的左上坐标来实现。

4)米的生成

米的大小与蛇的单节大小相同,米的生成应有一定的随机性质,那么可以使用rand()函数产生两个随机数字作为长和宽的坐标再用求余进行范围的限定。

5)蛇吃米后的操作

在这里主要是考虑是将增加后的节点以怎样的方式入队以让蛇的变化符合人的逻辑习惯,首先,蛇吃米的判定在蛇头完全覆盖米后立刻生效(因为逻辑行动总在渲染之前),那么可以选择立刻把吃米后蛇的变化表现出来,也可以选择让蛇消化一段时间然后再在蛇尾上增加(即把增加点的坐标设为蛇头,在经历一条蛇身的长度后才显示蛇的长度变化)我选择后者,毕竟什么动物都需要消化嘛

6)  失败的判定

首先,最简单的是碰壁失败,只需设计一段边界碰撞检测代码即可(用if语句实现),而蛇身的碰撞就需要花些心思,因为如果仅仅判断蛇头是否与蛇身体各个部分重合,必然要与吃米冲突,因为吃米我首先将在蛇头插入一个与蛇头坐标一样的新蛇头(为了实现消化的效果),那么在失败判定时必然会产生误判,解决方案可以有两个,一个是在碰身体的判断中忽略前三节,因为,蛇头绝对不可能与前三节产生碰撞,另一个方案是在遍历蛇身的同时考虑到蛇头仅仅不与它的第二节进行比较,我用了后一个方案,因为它实现起来不罗嗦。

7)  胜利的判定

很简单,只要在场景类中添加一个分数成员,吃一次米即增加,然后每一游戏循环都检验它的值。

8)  类的设计

考虑到游戏需要在大局上可能有诸如时间,分数,胜负判断等要求,我首先确定设计一个场景类来封装相关参数与操作。其次,蛇的操作与属性都很多,必然需要用一个类来封装(双人游戏时要考虑用接口类来实现)。最后,米也需要一定的操作(如定位和显示),也应封装为一类。综上所述,我准备用3个类来实现最后的单人游戏设计,这样一旦想到什么就可以根据类别来添加,比较方便。

b.双人游戏设计

1)类的设计

可以从一个类中定义两个实体,即一个甲蛇一个乙蛇。两条蛇共享同样的操作,但是却有着各自的属性。

2)胜利的判定

为每个蛇都单独设置一个吃米值,谁先到达一定值谁就获得胜利。

3)失败的判定

与单人游戏设计唯一增加的一条规则是:当双方蛇头对碰时,打平,蛇头撞对方蛇身或墙体时,失败。

 

根据以上的文档算是写出来了这么个小游戏,虽然结构上很不完善,但是本着向高手学习的目的,也就顾不得这么多了,说实话,在大学这几年我一直没有培养出好的编程素养与习惯,老师吗也仅仅能在理论上帮助我,一直很希望能得到真正高手的指导,如果有这样GGJJ愿意赐教,小弟先在这里谢过了。

 

以下是游戏代码,在VC6.0环境下编写:

 

/*操作指南
单人游戏
W 上
S 下
A 左
D 右
Ctrl 确定开始

双人游戏
方向键对应方向
Ctrl 确定开始
*/
#include "windows.h"
#include <stdio.h>
#include <stdlib.h>

/*---------0.以下为定义区--------------*/
#define UP 0      //方向定义    
#define DOWN 1
#define LEFT 2
#define RIGHT 3

#define SNK_SIZE 10      //蛇的形态相关数据
#define SNK_INIT_LENGHT 5

#define FDSHOW 1         //食物的状态
#define FDHIDE 0

#define WINSCORE 10      //胜利的最终得分

#define FORONEPLAYER 1   //游戏模式的分类
#define FORTWOPLAYER 2 

#define PLAY_1 1      //不同游戏玩家的代号
#define PLAY_2 2

#define PLAY_1_DEAD 1 //不同游戏玩家死亡的状态分类
#define PLAY_2_DEAD 2

#define STARTSCENE 0  //游戏进程的分类
#define BEFOREGAMESCENE 1
#define GAMESCENE 2
#define WINSCENE 3
#define LOSESCENE 4

 


#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)    //用来判断是否按下键盘上的特定键的宏定义
#define KEYUP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)    //用来判断是否释放键盘上的特定键的宏定义

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);  //窗口过程,用来初始化以及运行窗口

struct node        //节点结构体,用来构成链式队列
{
POINT s_p;
node* next;
};

struct queue_snake  //队列结构体

node* front;
node* rear;
}*QUEUE;


class Food;    //将Food以及Scene的类优先声明是因为在snake类中存在前两个类的友员函数
class Scene;

class snake    //snake类主要用来存放蛇的属性以及相关操作,比如蛇的初始化,蛇的移动,蛇的死亡等
{
private:
int snakelength;   //蛇的长度,用来标识蛇的节点构成数
int snakevelocity; //蛇的移动速度
int snakedirection;  //蛇的移动方向
POINT start_pos;     //蛇的起始位置(在这里要声明的是,本程序默认将10*10的方块作为游戏的地图单元,因此这里给出方块左
//上角的坐标,通过该坐标来确定具体是哪个方块)

POINT current_pos;   //蛇的当前位置
queue_snake s;       //蛇的队列,相当重要,是最基本的数据结构
int snknum;          //蛇的编号,是在双人模式中用来确定具体实体对象是玩家1还是玩家2的标志
int snkeatnum;       //蛇的吃食物的数量
COLORREF color;      //蛇的颜色
public:
snake();             //蛇的构造函数
snake(int, int, int, int,COLORREF);//蛇的重载构造函数,专为了实现双人模式而设计
~snake();                 //蛇的析构函数
void Insert_queue(POINT); //插入节点入蛇队列(可以不放在蛇的类中,仅仅是一个工具函数)
POINT Delete_queue();     //删除节点出队列(同上)
void SNKDraw(HDC);        //蛇的画面表现

 int SNKGetDirection();    //蛇的方向设置
void SNKSetDirection(int);

 int SNKGeteatnum();       //蛇的进食数量设置
void SNKSeteatnum(int);

int SNKGetVelocity();     //蛇的速度设置
void SNKSetVelocity(int);

COLORREF SNKGetcolor();     //蛇的颜色设置
void SNKSetcolor(COLORREF);

 int SNKDead();            //蛇的死亡判定逻辑
void SNKMove();           //蛇的移动判定逻辑
void SNKEat(Food&, Scene&);//蛇的进食判定逻辑
};

class Food    //Food类用来定义Food的属性与操作
{
private:
POINT fdposition;   //食物的出现位置
int fdstate;        //食物的显示状态
int fdflashflag;    //食物的闪烁,有色与透明的切换
public:
Food();             //食物的构造函数
void FDposinit();   //食物的位置初始化
void FDSetpos(POINT);  //食物位置属性的设置(用于当前食物被吃后新食物的生成)
void FDDraw(HDC);      //食物的图像显示
friend void snake::SNKEat(Food&, Scene&);//设置友员函数,具体看snake类中相关实现
};

class Scene        //场景类,用来宏观的控制整个游戏的进程,比如纪录得分,判断游戏的成败,设置场景的表现等,
//同时也开以获取如FPS等信息
{
private:
int scnscore;  //记录比赛得分
COLORREF scntextcolor;  //文字颜色
int scnloop;            //通过循环次数的控制来改变蛇的速度
int scnplaymode;        //游戏模式的标志
int scngamestep;        //当前游戏状态
int scndeadflag;        //用来判定是双人模式是哪个玩家死亡
//以下属性用来测试fps
int scnframe;
int scnfps;
DWORD scnpretime;
DWORD scnnowtime;

public:
Scene();   //场景类
void SCNShowstartsceen(HDC);//用来显示起始场景
void SCNBeforestart(HDC);   //用来显示预备场景
void SCNGamescene(HDC);     //用来显示主游戏场景
void SCNWaitstart(HDC); //。。。
int SCNWinandrestart(HDC);   //判定游戏胜利结束,玩家1胜利返回1,玩家2胜利返回2,否则返回0
int SCNLoseandrestart(HDC);   //判定游戏以失败结束,失败返回1,否则返回0(用于单人游戏)

 void SCNaddscore();  //用来增加分数(仅用于单人模式)
int SCNGetscore();   //获取分数

 void SCNDraw(HDC);   //背景的图像显示
void SCNlevel(snake&);  //场景的等级判定

void SCNSetmode(int);   //场景的模式设置    
int SCNGetmode();

    void SCNSetstepflg(int); //游戏进程的模式设置
int SCNGetstepflg();

 void SCNSetdeadflg(int); //游戏胜利者的设置
int SCNGetdeadflg();

void SCNfpsdraw(HDC , DWORD);   //用来显示游戏的fps
friend void snake::SNKEat(Food&, Scene&);  //...
};

void Manipulation(WPARAM);  //游戏键盘设置

/*---------1.以下为主程序区域--------------*/
snake snkmain(RIGHT, 200, 150, PLAY_1, RGB(255, 255, 0));
snake snksec(RIGHT, 200, 440, PLAY_2, RGB(0, 255, 255));
Food fdmain;
Scene scnmain;
HPEN hPen_snake;
HBRUSH hBrush_snake[3];
char scoreBoard[5];

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{

 /*------------1.1以下为窗口的初始化与建立-----------------------*/
static TCHAR szAppName[] = TEXT("HelloWIn");

 HWND hwnd;
HDC hdc;
MSG msg;
WNDCLASS wndclass;

 wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WndProc;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(hInstance, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;

 if(!RegisterClass(&wndclass))
{
MessageBox(NULL, TEXT("Failed!"), szAppName, MB_ICONERROR);

  return 0;
}

 hwnd = CreateWindow(szAppName
,TEXT("The hello Program")
,WS_OVERLAPPEDWINDOW
,0
,0
,800
,600
,NULL
,NULL
,hInstance
,NULL);

 ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);

    /*--------------------1.2以下为蛇的数据初始化区---------------------------------*/
hPen_snake = CreatePen(PS_SOLID, 1 ,RGB(0, 0, 0)); 
hBrush_snake[0] = CreateSolidBrush(RGB(0, 0, 0));
hBrush_snake[1] = CreateSolidBrush(RGB(255, 255, 255));
hBrush_snake[2] = CreateSolidBrush(RGB(255, 255, 0));

 while (TRUE)  

DWORD start_time = GetTickCount();   //初始化开始时间

if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
break;

TranslateMessage (&msg) ;
DispatchMessage (&msg) ;  
}
else
{
hdc = GetDC(hwnd);

   scnmain.SCNfpsdraw(hdc, start_time);

   switch(scnmain.SCNGetstepflg())   //总的游戏控制
{
case STARTSCENE:
scnmain.SCNShowstartsceen(hdc);
break;
case BEFOREGAMESCENE:
scnmain.SCNBeforestart(hdc);
break;
case GAMESCENE:
scnmain.SCNGamescene(hdc);    
break;
case WINSCENE:
scnmain.SCNWinandrestart(hdc);
break;
case LOSESCENE:
scnmain.SCNLoseandrestart(hdc);
break;
default:
break;
}
ReleaseDC(hwnd, hdc);      
}

scnmain.SCNlevel(snkmain);
while((GetTickCount() - start_time) < 30);   //通过控制开始时间与当前时间的差来控制游戏显示fps
}
return msg.wParam;
}

 

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

 switch(message)
{
case WM_CREATE:

      return 0 ;

     case WM_PAINT:
hdc = BeginPaint (hwnd, &ps);



EndPaint (hwnd, &ps) ;

return 0 ;

  case WM_KEYDOWN:
if(wParam == VK_ESCAPE)
SendMessage(hwnd, WM_CLOSE, 0, 0);
Manipulation(wParam);

   return 0;



case WM_DESTROY: 
DeleteObject(hPen_snake);

for(int j = 0;j < 2; j++)
{
DeleteObject(hBrush_snake[j]);
}

   snkmain.~snake();
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}

snake::snake(int snkdir, int snkposx, int snkposy, int snkplaynum, COLORREF rgb)
{
this->snknum = snkplaynum;
this->snakedirection = snkdir;
this->snakelength = 0;
this->snakevelocity = 1;
this->start_pos.x = snkposx;
this->start_pos.y = snkposy;
this->s.front = this->s.rear = NULL;
this->color = rgb;

 int i;
POINT temp;
for(i = 0; i < SNK_INIT_LENGHT; i++)
{
temp.x = this->start_pos.x + SNK_SIZE * i;
temp.y = this->start_pos.y;
Insert_queue(temp);
}

this->current_pos.x = this->s.rear->s_p.x;
this->current_pos.y = this->s.rear->s_p.y;
}

snake::snake()
{
this->snknum = PLAY_1;
this->snakedirection = RIGHT;
this->snakelength = 0;
this->snakevelocity = 1;
this->start_pos.x = 200;
this->start_pos.y = 150;
this->s.front = this->s.rear = NULL;
this->snkeatnum = 0;

 int i;
POINT temp;
for(i = 0; i < SNK_INIT_LENGHT; i++)
{
temp.x = this->start_pos.x + SNK_SIZE * i;
temp.y = this->start_pos.y;
Insert_queue(temp);
}

this->current_pos.x = this->s.rear->s_p.x;
this->current_pos.y = this->s.rear->s_p.y;
}

void snake::Insert_queue(POINT p)
{
node* temp;

 if(this->snakelength == 0 && this->s.front == NULL)
{
temp = new node;
temp->s_p.x = p.x;
temp->s_p.y = p.y;
this->s.front = this->s.rear = temp;
this->snakelength++;
}

 else
{
temp = new node;
temp->s_p.x = p.x;
temp->s_p.y = p.y;
this->s.rear->next = temp;
this->s.rear = temp;
this->snakelength++;
}
}

snake::~snake()
{
int i;

 node* temp;

 for(i = 0; i < this->snakelength; i++)
{
//        temp = this->s.front;
//  this->s.front = this->s.front->next;
//  delete temp;
}
}

POINT snake::Delete_queue()
{
POINT temp;
node* t;
if(this->s.front == this->s.rear)
{
temp.x = this->s.front->s_p.x;
temp.y = this->s.front->s_p.y;
delete this->s.front;
}
else
{
temp.x = this->s.front->s_p.x;
temp.y = this->s.front->s_p.y;
t = this->s.front;
this->s.front = this->s.front->next;
delete t;
}
this->snakelength--;
return temp;   
}

void snake::SNKDraw(HDC hdc)
{
int i;
i = 0;

 hBrush_snake[2] = CreateSolidBrush(this->color);

 node* temp;
temp = this->s.front;

 for(i = 0; i < this->snakelength; i++)
{
SelectObject(hdc, hBrush_snake[i % 2 + 1]);
SelectObject(hdc, hPen_snake);

Rectangle(hdc, temp->s_p.x, temp->s_p.y, temp->s_p.x + SNK_SIZE, temp->s_p.y + SNK_SIZE);
temp = temp->next;
}
}

void snake::SNKMove()
{
int i;
i = 0;

 POINT temp;

 switch(this->snakedirection)
{
case UP:
this->Delete_queue();
temp.x = this->s.rear->s_p.x;
temp.y = this->s.rear->s_p.y;
temp.y -= SNK_SIZE * this->snakevelocity;
Insert_queue(temp);
break;

case DOWN:
this->Delete_queue();
temp.x = this->s.rear->s_p.x;
temp.y = this->s.rear->s_p.y;
temp.y += SNK_SIZE * this->snakevelocity;
Insert_queue(temp);
break;

   case LEFT:
this->Delete_queue();
temp.x = this->s.rear->s_p.x;
temp.y = this->s.rear->s_p.y;
temp.x -= SNK_SIZE * this->snakevelocity;
Insert_queue(temp);
break;

   case RIGHT:
this->Delete_queue();
temp.x = this->s.rear->s_p.x;
temp.y = this->s.rear->s_p.y;
temp.x += SNK_SIZE * this->snakevelocity;
Insert_queue(temp);
break;

default:
break;
}

 this->current_pos.x = this->s.rear->s_p.x;
this->current_pos.y = this->s.rear->s_p.y;
}

int snake::SNKDead()
{
node* temp;

 if(scnmain.SCNGetmode() == FORTWOPLAYER)
{
if(this->snknum == PLAY_1)
{
temp = this->s.front;

            if( this->current_pos.x < 200 || this->current_pos.x > 600 - SNK_SIZE
|| this->current_pos.y < 150 || this->current_pos.y > 450 - SNK_SIZE)
return PLAY_1_DEAD;

      while(temp != this->s.rear)
{
if(temp->s_p.x == this->s.rear->s_p.x
&& temp->s_p.y == this->s.rear->s_p.y
&& temp->next != this->s.rear)//pay attention
return PLAY_1_DEAD;
temp = temp->next;
}

            temp = snksec.s.front;
while(temp != snksec.s.rear)
{
if(temp->s_p.x == this->s.rear->s_p.x
&& temp->s_p.y == this->s.rear->s_p.y
&& temp->next != this->s.rear)//pay attention
return PLAY_1_DEAD;
temp = temp->next;
}
}
else
{
temp = this->s.front;

   if( this->current_pos.x < 200 || this->current_pos.x > 600 - SNK_SIZE
|| this->current_pos.y < 150 || this->current_pos.y > 450 - SNK_SIZE)
return PLAY_2_DEAD;

      while(temp != this->s.rear)
{
if(temp->s_p.x == this->s.rear->s_p.x
&& temp->s_p.y == this->s.rear->s_p.y
&& temp->next != this->s.rear)//pay attention
return PLAY_2_DEAD;
temp = temp->next;
}

   temp = snkmain.s.front;
while(temp != snkmain.s.rear)
{
if(temp->s_p.x == this->s.rear->s_p.x
&& temp->s_p.y == this->s.rear->s_p.y
&& temp->next != this->s.rear)//pay attention
return PLAY_2_DEAD;
temp = temp->next;
}
}
}
else
{
temp = this->s.front;

     if( this->current_pos.x < 200 || this->current_pos.x > 600 - SNK_SIZE
|| this->current_pos.y < 150 || this->current_pos.y > 450 - SNK_SIZE)
return PLAY_1_DEAD;

     while(temp != this->s.rear)
{
if(temp->s_p.x == this->s.rear->s_p.x
&& temp->s_p.y == this->s.rear->s_p.y
&& temp->next != this->s.rear)//pay attention
return PLAY_1_DEAD;
temp = temp->next;
}
}

 
return 0;
}

int snake::SNKGetDirection()
{
return this->snakedirection;
}

void snake::SNKSetDirection(int dir)
{
this->snakedirection = dir;
}

COLORREF snake::SNKGetcolor()
{
return this->color;
}

void snake::SNKSetcolor(COLORREF rgb)
{
this->color = rgb;
}

int snake::SNKGeteatnum()
{
return this->snkeatnum;
}

void snake::SNKSeteatnum(int num)
{
this->snkeatnum = num;
}

void snake::SNKEat(Food& food, Scene& scene)
{
int f_x, f_y;
f_x = food.fdposition.x;
f_y = food.fdposition.y;

 if(this->s.rear->s_p.x == f_x && this->s.rear->s_p.y == f_y)
{
this->Insert_queue(this->s.rear->s_p);
if(scene.SCNGetmode() == FORONEPLAYER)
scene.scnscore++;
else
this->snkeatnum++;
food.FDposinit(); 
}
}

//-------------------------------------------Food
Food::Food()
{
this->FDposinit();

 this->fdstate = FDSHOW;
this->fdflashflag = 0;

void Food::FDposinit()
{
int p_x, p_y;
int temp;

    do
{
temp = rand();
p_x = temp % 600 - temp % 10;

} while(p_x < 200);
this->fdposition.x = p_x;

 do
{
temp = rand();
p_y = temp % 450 - temp % 10;

} while(p_y < 150);
this->fdposition.x = p_x;
this->fdposition.y = p_y;
}

void Food::FDDraw(HDC hdc)
{
if(this->fdflashflag == 0)
{
SelectObject(hdc, hBrush_snake[2]);
SelectObject(hdc, hPen_snake);
}
else
{
SelectObject(hdc, hBrush_snake[1]);
SelectObject(hdc, hPen_snake);
}
Rectangle(hdc, this->fdposition.x, this->fdposition.y, this->fdposition.x + SNK_SIZE,  this->fdposition.y + SNK_SIZE);
this->fdflashflag += 1;
this->fdflashflag %= 10;
}

//-------------------------------------------------Scene
Scene::Scene()
{
this->scnscore = 0;
this->scntextcolor = RGB(0, 0, 0);
this->scnloop = 0;
this->scnplaymode = FORTWOPLAYER;
this->scndeadflag = 0;

 this->scnframe = 0;
this->scnfps = 0;
this->scnpretime = 0;
this->scnnowtime = 0;
}

void Scene::SCNDraw(HDC hdc)
{
//  LOGFONT ifont;
// ifont.lfHeight = 25;
// ifont.lfWidth = 15;
// CreateFontIndirect(&ifont);
//  SelectObject(hdc, &ifont);
SelectObject(hdc, hBrush_snake[1]);
SelectObject(hdc, hPen_snake);

 Rectangle(hdc, 200, 150,600, 450);

 SetTextColor(hdc,this->scntextcolor);

    TextOut(hdc, 200, 50, "Till now your score is:", strlen("Till now your score is:"));

 if(this->scnscore < 10)
sprintf(scoreBoard, "00%d", this->scnscore);
else if(this->scnscore < 100)
sprintf(scoreBoard, "0%d", this->scnscore);
else
sprintf(scoreBoard, "%d", this->scnscore);

 TextOut(hdc, 370, 50, scoreBoard, strlen(scoreBoard));

}

void Scene::SCNaddscore()
{
this->scnscore++;
}

int Scene::SCNGetscore()
{
return this->scnscore;
}

void Scene::SCNlevel(snake& snk)
{

if(this->scnscore < 10)
{
while(this->scnloop < 10000000)
{
this->scnloop++;
}
this->scnloop = 0;
}
else if(this->scnscore < 20)
{
while(this->scnloop < 5000000)
{
this->scnloop++;
}
this->scnloop = 0;
}
else if(this->scnloop < 30)
{
while(this->scnloop < 2500000)
{
this->scnloop++;
}
this->scnloop = 0;
}
else
{
this->scnloop = 0;
}
}

void Scene::SCNWaitstart(HDC)
{

}

void Scene::SCNSetmode(int mode)
{
this->scnplaymode = mode;
}

int Scene::SCNGetmode()
{
return this->scnplaymode;
}

void Scene::SCNSetstepflg(int start)
{
this->scngamestep = start;
}

int Scene::SCNGetstepflg()
{
return this->scngamestep;
}

void Scene::SCNSetdeadflg(int dead)
{
this->scndeadflag = dead;
}

int Scene::SCNGetdeadflg()
{
return this->scndeadflag;
}

 

void Scene::SCNShowstartsceen(HDC hdc)

SelectObject(hdc, hBrush_snake[1]);
SelectObject(hdc, hPen_snake);

 Rectangle(hdc, 200, 150,600, 450);

 TextOut(hdc, 370, 200, "贪吃蛇",
strlen("贪吃蛇"));

 if(KEYDOWN(VK_SPACE))
{
if(this->scnplaymode == FORONEPLAYER)
this->scnplaymode = FORTWOPLAYER;
else
this->scnplaymode = FORONEPLAYER;
}

 if(this->scnplaymode == FORONEPLAYER)
{
SetTextColor(hdc,RGB(255, 0, 0));

     TextOut(hdc, 350, 270, "1 player mode",
strlen("1 player mode"));

  SetTextColor(hdc,RGB(0, 0, 0));

     TextOut(hdc, 350, 320, "2 players mode",
strlen("2 players mode"));
}
else
{
SetTextColor(hdc,RGB(0, 0, 0));

     TextOut(hdc, 350, 270, "1 player mode",
strlen("1 player mode"));

  SetTextColor(hdc,RGB(255, 0, 0));

     TextOut(hdc, 350, 320, "2 players mode",
strlen("2 players mode")); 
}

 if(KEYDOWN(VK_CONTROL))
{
this->SCNSetstepflg(BEFOREGAMESCENE);
}
}

void Scene::SCNBeforestart(HDC hdc)
{
scnmain.SCNDraw(hdc);
fdmain.FDDraw(hdc);

 if(this->SCNGetmode() == FORONEPLAYER)
{
snkmain.SNKDraw(hdc);
}
else
{
snkmain.SNKDraw(hdc);
snksec.SNKDraw(hdc); 


TextOut(hdc, 350, 300, "Press space to start", strlen("Press space to start"));

 
if(KEYDOWN(VK_SPACE))
{
scnmain.SCNSetstepflg(GAMESCENE);
}
}

void Scene::SCNGamescene(HDC hdc)
{

    if(this->SCNGetmode() == FORONEPLAYER)
{
snkmain.SNKMove();
snkmain.SNKEat(fdmain, scnmain);

scnmain.SCNDraw(hdc);
fdmain.FDDraw(hdc);
snkmain.SNKDraw(hdc);
if(scnmain.SCNWinandrestart(hdc))
{
scnmain.SCNSetstepflg(WINSCENE);
}
if(scnmain.SCNLoseandrestart(hdc))
{
scnmain.SCNSetstepflg(LOSESCENE);
}
}
else
{
snkmain.SNKMove();
snksec.SNKMove();
snkmain.SNKEat(fdmain, scnmain);
snksec.SNKEat(fdmain, scnmain);

scnmain.SCNDraw(hdc);
fdmain.FDDraw(hdc);
snkmain.SNKDraw(hdc);
snksec.SNKDraw(hdc);

  if(scnmain.SCNWinandrestart(hdc))
{
scnmain.SCNSetstepflg(WINSCENE);
}
}

}

int Scene::SCNWinandrestart(HDC hdc)
{
if(this->SCNGetmode() == FORONEPLAYER)
{
if(this->SCNGetscore() == WINSCORE)
{
this->SCNDraw(hdc);

      SelectObject(hdc, hPen_snake);

         SetTextColor(hdc,RGB(255, 0, 0));

            TextOut(hdc, 200, 150, "You Win!!!Press Ctrl to restart game", strlen("You Win!!!Press Ctrl to restart game"));

   this->SCNSetstepflg(WINSCENE);

return 1;
}

return 0; 
}
else
{
this->SCNSetdeadflg(snksec.SNKDead());

  if(snkmain.SNKGeteatnum() == WINSCORE || this->SCNGetdeadflg() == PLAY_2_DEAD)
{
this->SCNDraw(hdc);

   SelectObject(hdc, hPen_snake);

         SetTextColor(hdc,RGB(255, 0, 0));

            TextOut(hdc, 200, 150, "Play 1 Win!!!Press Ctrl to restart game", strlen("Play 1 Win!!!Press Ctrl to restart game"));

   this->SCNSetstepflg(WINSCENE);

return 1;
}

this->SCNSetdeadflg(snkmain.SNKDead());

  if(snksec.SNKGeteatnum() == WINSCORE || this->SCNGetdeadflg() == PLAY_1_DEAD)
{
this->SCNDraw(hdc);

   SelectObject(hdc, hPen_snake);

         SetTextColor(hdc,RGB(255, 0, 0));

            TextOut(hdc, 200, 150, "Play 2 Win!!!Press Ctrl to restart game", strlen("Play 2 Win!!!Press Ctrl to restart game"));

   this->SCNSetstepflg(WINSCENE);

return 1;
}

return 0; 
}   
}

int Scene::SCNLoseandrestart(HDC hdc)

if(snkmain.SNKDead())
{
this->SCNDraw(hdc);

  SelectObject(hdc, hPen_snake);

     SetTextColor(hdc,RGB(255, 0, 0));

  

        TextOut(hdc, 200, 150, "You lose!!!Press Ctrl to restart game", strlen("You lose!!!Press Ctrl to restart game"));

  this->SCNSetstepflg(LOSESCENE);

return 1;
}
else
return 0;
}

void Scene::SCNfpsdraw(HDC hdc,DWORD now)
{
char tmp[40];

 if(this->scnnowtime == 0)
this->scnnowtime = now;

 this->scnframe++;
if((now - this->scnnowtime) > 1000)
{
this->scnfps = this->scnframe;
this->scnframe = 0;
this->scnnowtime = now;
}

 sprintf(tmp, "每秒显示%d个画面", this->scnfps);
TextOut(hdc, 0, 0, tmp,strlen(tmp));
}
//-------------------------------------------------Globe

void Manipulation(WPARAM wParam)
{
switch(wParam)
{
case VK_UP:
if(snkmain.SNKGetDirection() == LEFT)
{
snkmain.SNKSetDirection(UP); 
}
else if(snkmain.SNKGetDirection() == RIGHT)
{
snkmain.SNKSetDirection(UP); 
}
else
{
//
}
break;
case VK_DOWN:
if(snkmain.SNKGetDirection() == LEFT)
{
snkmain.SNKSetDirection(DOWN); 
}
else if(snkmain.SNKGetDirection() == RIGHT)
{
snkmain.SNKSetDirection(DOWN); 
}
else
{
//
}
break;
case VK_LEFT:
if(snkmain.SNKGetDirection() == UP)
{
snkmain.SNKSetDirection(LEFT); 
}
else if(snkmain.SNKGetDirection() == DOWN)
{
snkmain.SNKSetDirection(LEFT); 
}
else
{
//
}
break;
case VK_RIGHT:
if(snkmain.SNKGetDirection() == UP)
{
snkmain.SNKSetDirection(RIGHT); 
}
else if(snkmain.SNKGetDirection() == DOWN)
{
snkmain.SNKSetDirection(RIGHT); 
}
else
{
//
}
break;

case 'W':
if(snksec.SNKGetDirection() == LEFT)
{
snksec.SNKSetDirection(UP); 
}
else if(snksec.SNKGetDirection() == RIGHT)
{
snksec.SNKSetDirection(UP); 
}
else
{
//
}
break;
case 'S':
if(snksec.SNKGetDirection() == LEFT)
{
snksec.SNKSetDirection(DOWN); 
}
else if(snksec.SNKGetDirection() == RIGHT)
{
snksec.SNKSetDirection(DOWN); 
}
else
{
//
}
break;
case 'A':
if(snksec.SNKGetDirection() == UP)
{
snksec.SNKSetDirection(LEFT); 
}
else if(snksec.SNKGetDirection() == DOWN)
{
snksec.SNKSetDirection(LEFT); 
}
else
{
//
}
break;
case 'D':
if(snksec.SNKGetDirection() == UP)
{
snksec.SNKSetDirection(RIGHT); 
}
else if(snksec.SNKGetDirection() == DOWN)
{
snksec.SNKSetDirection(RIGHT); 
}
else
{
//
}
break;     

default:
break;

}

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Python学习(五)Python len()函数获取字符串长度或字节数

    Python 中,要想知道一个字符串有多少个字符(获得字符串长度),或者一个字符串占用多少个字节,可以使用 len 函数。len 函数的基本语法格式为:len(string)其中 string 用于指定要进行长度统计的字符串。 例如,定义一个字符串,内容为“https://www.baidu.com”,然后用 le…...

    2024/4/20 2:16:00
  2. 基于JavaMail的邮件收发系统

    摘 要电子邮件在当今社会中扮演了一个很重要的角色。越来越多的人在使用它。而且用它的人数势必会继续增加。本文介绍了Javamail邮件收发系统的开发背景,对国内外现有的多种成熟的电子邮件系统进行分析和比较,总结出它们的优缺点,对Javamail技术进行深入研究,提出并设计实现…...

    2024/4/17 18:03:28
  3. 贪吃蛇代码(捕捉方向键需要使用wx.EVT_KEY_UP事件)

    今天用wxPython做了个贪吃蛇,当是对wxPythonGDI的巩固。 关于如何在屏幕上绘画,请参见wxPython In Action的第六章1.1在屏幕上绘画 贪吃蛇源码下载不要积分 贪吃蛇源码及py2exe打包结果下载骗一个积分 突然发现一个bug,buffer的实际面积比窗口显示的要大,也就是说,当snake…...

    2024/4/18 23:02:10
  4. html实战演练--高级邮箱登陆界面和邮件管理系统

    html实战演练--高级邮箱登陆界面和清辉在线邮件管理系统 韩顺平php课程---html入门及实战演练 注明:下面练习程序只是为了学习html,因此布局方面未采用div+css等其他模式,也未实现网站的动态响应,未涉及php、jsp等内容。如果对于涉及的html知识理解有困难,可以参看《html入门…...

    2024/4/18 12:08:29
  5. Eclipse JEE中tomcat配置

    Eclipse JEE与Tomcat整合,配置需要注意的地方: - 设置Sever Locations - 配置Server Options - 配置Publishing - 配置Timeouts - 查看Web ModulesServer Locations指定服务器的路径和部署路径 默认选项是:Use workspace metadata(does not modify Tomcat installatio…...

    2024/3/31 18:32:32
  6. SAP HANA SQL获取字符串长度

    博客转移,点击进入:SAP HANA SQL获取字符串长度我在公众号里写了很多SAP的文章有兴趣可以关注一下公众号:SAP Technical...

    2024/4/20 9:55:18
  7. 软件提供下载

    弹簧 m:/_soft/1/moldex3d-r7.0.rarParaform.v3.0.rarPKPM2006年6月份结构.nrgPKPM使用说明文件.rarPolyworksv9.0forwindows.rarPro_NC 三轴铣床加工秘籍.rarPTC ICEM DDN V3.404.L.rarShipConstructor.2006v1.00.rarsimpack8613.rarStruCAD10.1.rarT3v2005.1.rarTrafficWare.…...

    2024/4/17 18:04:14
  8. 什么是***

    中文名称:*** 英文名称:hacker 定义:利用系统安全漏洞对网络进行***破坏或窃取资料的人。***最早源自英文hacker,早期在美国的电脑界是带有褒义的。但在媒体报导中,***一词往往指那些“软件骇客”(software cracker)。***一词,原指热心于计算机技术,水平高超的电脑专家,…...

    2024/4/26 11:40:58
  9. 五款常用邮件管理系统评测

    以邮件为主要沟通媒介的外贸企业,对邮件的依赖性可以说已经达到不能或缺的地步。软件厂商们深谙这一定律,为外贸企业提供了种类庞大的软件系统以供选择。以下笔者抽出其中五款使用较为普遍的邮件管理系统,根据其性能、系统稳定性、性价比等方面进行总结,以供外贸企业选择。…...

    2024/4/17 18:04:41
  10. jstl 获取字符串长度、字符串操作

    /***********截取一定长度字符串*****************/ 在应用程序开发中,如果内容过长,想截取一定长度字符,然后补充"....." jstl1.1引入了一个fn.tld的标签,用于处理字符,如获得字符length,substring,indexof,endWith,lowcase 实现截取字符串 如: <c:set var="…...

    2024/4/18 16:06:18
  11. 手把手教你如何利用intellijidea2018配置springboot的外置Tomcat

    第一步: 启动idea2018, 创建一个Springboot的新工程注意选择war选择web第二步: 添加src/main/webapp目录继续点ok即可第三步: 配置Tomcat配置Tomcat的安装目录, 我这里选择Tomcat9继续点ok即可, 配置好后启动运行Tomcat已经启动成功:尝试写一个文件测试一下(添加文件测试时需要…...

    2024/4/17 18:05:04
  12. dsp学习资料之一

    多核编程指南:多核编程和应用程序/DSP系统 http://www.61ic.com.cn/article-52.html TI原厂开发板代码及用户指南 http://www.61ic.com/code/forumdisplay.php?fid=322 TMDXEVM6678L_EVM原理图(61ic首发) http://www.61ic.com.cn/article-49.html TMDSEVM6678L EVM 技术参考手…...

    2024/4/17 18:05:23
  13. 中国C2C第一网店揭秘:柠檬绿茶

    今天,中国有太多的网店店主都想要知道:中国C2C第一网店是谁?它在今天是什么规模? 让我来告诉你:她就是柠檬绿茶,中国C2C第一网店。2007年8月31日,它在淘宝网上突破20万个好评(1笔成功生意可以换来1个好评),成为淘宝网上第一家最高信誉等级5皇冠网店。2007年12月31日,…...

    2024/4/18 11:15:04
  14. 一个绝好的大型软件ISO下载FTP站!

    主题:【分享】一个绝好的大型软件ISO下载FTP站! 内容: http://bbs.downsurf.com 主论坛 ftp://list:list@soft.downsurf.com 软件站24小时开放高速下载 已经更新超过600G的软件 七台高级光纤服务器 水晶报表9.2中文版等 每日更新0day破解软件 最新程序设计工具及组件 以ISO为…...

    2024/4/17 18:05:40
  15. 在eclipse中配置tomcat以及测试tomcat是否配置成功

    在eclipse中配置tomcat使用eclipse开发web项目时,首先要在eclipse中配置web服务器,然后就可以在eclipse中创建web项目直接部署到web服务器中去,使用eclipse测试java web程序使用eclipse开发web程序 步骤:项目建立、建立jsp文件、配置web服务器,发布项目1.创建jsp文件<%…...

    2024/4/18 19:29:33
  16. SendEmail--邮件分发管理系统

    SendEmail–邮件分发管理系统这是一个一直很想做的项目,需求就是发送邮件,以前在博客上发过各种编程语言如何发送邮件的代码,无一例外都需要配置各种参数,Python还好,有库可以直接用,但Java和PHP就得导入包,还可能出各种错,当好不容易解决了这个项目里的问题,下个项目…...

    2024/4/11 19:36:18
  17. Tomcat并发数配置

    配合做压力测试的时候,有时候提高并发数的时候 莫名的出现服务器卡顿现象,服务器拒绝连接,前端出现502 Bad Gateway等错误信息,而后端服务器日志确没有错误提示。 可能原因是tomcat高并发下连接数设置问题,或者没有设置,采用默认的。 解决方法增加tomcat连接数 在tomcat…...

    2024/4/17 18:04:46
  18. Sqlite基础之如何获取字符串长度

    Sqlite基础之如何获取字符串长度 select mkey,LENGTH(mkey) from mword where LENGTH(mkey) =1...

    2024/4/17 18:05:10
  19. 强大的邮件系统和简单的后台管理

    强大的邮件系统和简单的后台管理环境: CentOS 6.0软件:PostFix Dovecot描述:Postfix是收发信全球最快的邮件服务器,而且安全免费,无论是从成本还是稳定/安全考虑 都是企业最好的选择。服务器运维技术一直都是朝着高效,稳定,安全,易管理的方向发展。 本邮件服务…...

    2024/4/20 4:05:07
  20. 化构MIDAS NFX.2017.R1.20161104.Win32_64-ISO 1DVD

    MIDAS NFX.2017.R1.20161104.Win32_64-ISO 1DVD midas NFX 2016 R1 build 11102016 x86+x64 MIDAS/Gen是以Windows为开发平台的结构分析和优化设计系统。MIDAS/Civil不仅是通用的结构分析软件,而且还可以分析象预应力箱型桥梁、悬索桥、斜拉桥等特殊的结构形式,并且可以做施…...

    2024/4/20 9:26:58

最新文章

  1. 力扣刷题--数组--第三天

    今天再做两道二分查找的题目&#xff0c;关于二分查找的知识可看我前两篇博客。话不多说&#xff0c;直接开干&#xff01; 题目1&#xff1a;69.x 的平方根 题目详情&#xff1a;   给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。由于返回类型是整数&#…...

    2024/5/9 3:43:48
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. llama.cpp运行qwen0.5B

    编译llama.cp 参考 下载模型 05b模型下载 转化模型 创建虚拟环境 conda create --prefixD:\miniconda3\envs\llamacpp python3.10 conda activate D:\miniconda3\envs\llamacpp安装所需要的包 cd G:\Cpp\llama.cpp-master pip install -r requirements.txt python conver…...

    2024/5/8 23:16:56
  4. 54.螺旋矩阵

    题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。示例 1&#xff1a;输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a;输入&#xff1a;matrix …...

    2024/5/8 11:31:17
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/8 6:01:22
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/7 14:25:14
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/8 20:48:49
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/8 19:33:07
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/8 20:38:49
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57