百韵网 >>  正文

#include <iostream.h> #include <windows.h> #include <stdlib.h> #include <conio.h> #include <time.h> 求高手,改程序!#include <iostream.h> ...

来源:www.baiyundou.net   日期:较早时间
#include "stdafx.h"
#include "Snake.h"

#include <afxtempl.h>
#include <iostream.h>

#include "SnakeDoc.h"
#include "SnakeView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

IMPLEMENT_DYNCREATE(CSnakeView, CView)

BEGIN_MESSAGE_MAP(CSnakeView, CView)
//{{AFX_MSG_MAP(CSnakeView)
ON_COMMAND(ID_GAME_START, OnGameStart)
ON_WM_KEYDOWN()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

CSnakeView::CSnakeView()//构造函数
{
// TODO: add construction code here
IniGame();
}

CSnakeView::~CSnakeView()//析构函数
{
}

BOOL CSnakeView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

return CView::PreCreateWindow(cs);
}

// 界面设定

void CSnakeView::OnDraw(CDC* pDC)
{
CSnakeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->SelectStockObject(WHITE_BRUSH);
pDC->Rectangle(CRect(m_nLeft-1,m_nTop-1,m_nLeft+m_nWidth*m_nSize+1,m_nTop+m_nHeight*m_nSize+1));

CString uStr;
uStr.Format("用时:%d",m_nTime);//用时显示
pDC->TextOut(m_nLeft+m_nWidth*m_nSize+30,40,uStr);

uStr.Format("得分:%d",m_nCount);//得分显示
pDC->TextOut(m_nLeft+m_nWidth*m_nSize+30,140,uStr);

pDC->SelectStockObject(GRAY_BRUSH);//贪吃蛇颜色(黑BLACK_BRUSH,深灰DKGRAY_BRUSH,灰GRAY_BRUSH,浅灰LTGRAY_BRUSH,白WHITE)
pDC->Rectangle(CRect(m_nLeft+m_pAim.y*m_nSize,m_nTop+m_pAim.x*m_nSize,m_nLeft+(m_pAim.y+1)*m_nSize,m_nTop+(m_pAim.x+1)*m_nSize));

for(int i=0;i<=m_aBody.GetUpperBound();i++)
{
CPoint uPoint=m_aBody.GetAt(i);
pDC->Rectangle(CRect(m_nLeft+uPoint.y*m_nSize,m_nTop+uPoint.x*m_nSize,m_nLeft+(uPoint.y+1)*m_nSize,m_nTop+(uPoint.x+1)*m_nSize));
}
}

//诊断

#ifdef _DEBUG
void CSnakeView::AssertValid() const
{
CView::AssertValid();
}

void CSnakeView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}

CSnakeDoc* CSnakeView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSnakeDoc)));
return (CSnakeDoc*)m_pDocument;
}
#endif

//消息处理
void CSnakeView::IniAim()
{
int uAimX,uAimY;
while(1)
{
uAimX=rand()%m_nHeight;
uAimY=rand()%m_nWidth;
int uTag=0;
for(int i=0;i<=m_aBody.GetUpperBound();i++)
{
CPoint uPoint=m_aBody.GetAt(i);
if(uPoint.x==uAimX || uPoint.y==uAimY)
{
uTag=1;
break;
}
}
if(uTag==0)
break;
}
m_pAim=CPoint(uAimX,uAimY);
}

//游戏窗框
void CSnakeView::IniGame()
{
m_nLeft=20; //左边界
m_nTop=20; //上边界
m_nWidth=57; //窗框宽度
m_nHeight=33; //窗框高度
m_nSize=14; //缩放比例
m_nDirect=1; //运动方向,只能设定为1
m_nCount=0; //得分计数起始值

m_aBody.RemoveAll();
m_aBody.Add(CPoint(2,8)); //蛇身的起始位置(共6个)
m_aBody.Add(CPoint(2,7));
m_aBody.Add(CPoint(2,6));
m_aBody.Add(CPoint(2,5));
m_aBody.Add(CPoint(2,4));
m_aBody.Add(CPoint(2,3));

m_nTime=0;
m_nTime1=0;

srand((unsigned)time(NULL));

IniAim();
}

void CSnakeView::ReDisplay(CPoint pPoint)
{
InvalidateRect(CRect(m_nLeft+pPoint.y*m_nSize,m_nTop+pPoint.x*m_nSize,m_nLeft+(pPoint.y+1)*m_nSize,m_nTop+(pPoint.x+1)*m_nSize));
}

//游戏开始
void CSnakeView::OnGameStart()
{
// TODO: Add your command handler code here
IniGame();
m_nGameStatus=1;
SetTimer(1,100,NULL);
Invalidate();
}

void CSnakeView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
switch(nChar)
{
case 65:
case 37: //向左走(A或left)
m_nDirect=2;
break;
case 87:
case 38: //向上走(W或up)
m_nDirect=4;
break;
case 68:
case 39: //向右走(D或right)
m_nDirect=1;
break;
case 83:
case 40: //向下走(S或down)
m_nDirect=3;
break;
}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CSnakeView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
m_nTime1++;
if(m_nTime1==10)
{
m_nTime++;
m_nTime1=0;
Invalidate();
}
CPoint uPoint=m_aBody.GetAt(0);
int uTag=0;
switch(m_nDirect)
{
case 1: //向右走
uPoint.y++;
if(uPoint.y>=m_nWidth)
uTag=1;
break;
case 2: //向左走
uPoint.y--;
if(uPoint.y<0)
uTag=1;
break;
case 3: //向下走
uPoint.x++;
if(uPoint.x>=m_nHeight)
uTag=1;
break;
case 4: //向上走
uPoint.x--;
if(uPoint.x<0)
uTag=1;
break;
}

//游戏结束对话框内容
CString strTemp;
strTemp.Format("你的得分是:%d 分\n你的用时是:%d 秒",m_nCount,m_nTime);

//检查蛇是否撞倒自身
if(uTag==0)
{
for(int i=0;i<m_aBody.GetUpperBound();i++)
{
CPoint uPoint1=m_aBody.GetAt(i);
if(uPoint1.x==uPoint.x && uPoint1.y==uPoint.y)
{
uTag=1;
break;
}
}
}
if(uTag==0)
{
m_aBody.InsertAt(0,uPoint);
ReDisplay(uPoint);
if(uPoint.x==m_pAim.x && uPoint.y==m_pAim.y)
{
m_nCount++;
IniAim();
Invalidate();
}
else
{
CPoint uPoint1=m_aBody.GetAt(m_aBody.GetUpperBound());
m_aBody.RemoveAt(m_aBody.GetUpperBound());
ReDisplay(uPoint1);
}
}
else
{
KillTimer(1);
MessageBox(strTemp,"游戏结束");//游戏结束对话框
}
CView::OnTimer(nIDEvent);
}

不会就重修吧

你是什么学校的?

求高手,改程序!#include <iostream.h> #include<malloc.h> #include<stdlib.h> #include <string.h>~

你是设计一个字符串类世吧?就是跟那个string类型差不多的是吧?要不我写个给你好吧

不是写的很清楚嘛!iostream.h 输入输出流头文件,C++中用的,你要是用cout,cin等函数就要包含这个头文件,stdio.h标准输入输出流,这是在C中常用的库文件,printf就在这里。stdlib.h标准库文件,string.h字符串库文件,time.h和时间相关的库文件 inc.h这个好像是汇编下的常量定义的库文件

相关要点总结:
(编辑:本站网友)
相关推荐
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图
@ 百韵网