我有(不能打开源文件&“Stdafx.H”错误)如果我删除它我的游戏运行但继续得分板,为什么? [英] I Got (Cannot Open Source File "Stdafx.H" Error) And If I Erase It My Game Run But Go On Score Board, Why Is That ?

查看:72
本文介绍了我有(不能打开源文件&“Stdafx.H”错误)如果我删除它我的游戏运行但继续得分板,为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

#include "stdafx.h"                           // Used for Visual Studio
#include <iostream>                           // Used for cout/cin 
#include <conio.h>                            // Used for getch()
#include <windows.h>                          // Used for clearing screen
#include <ctime>                              // Used for managing time (speeding/slowing gmae)
#include <vector>                             // Used for items
#include <fstream>                            // USed for high score


using namespace std;
#define WIDTH 20
#define HEIGHT 20
char Level[HEIGHT][WIDTH];

// FUNCTION DECLARATIONS
void Initialize(int size, int snakeX[], int snakeY[]);                                                      // Initialise snake
void ClearScreen();                                                                                         // Clear screen
void BuildLevel();                                                                                          // Build level
void ReDraw();                                                                                              // Redraw level
void Update(int &size, int snakeX[], int snakeY[], int tempX[], int tempY[], int &item_count, int &points); // Update game loop
void SpeedUpdate();                                                                                         // Update snakes speed
void Items(vector<int> &itemX, vector<int> &itemY, int &item_count, int snakeX[], int snakeY[], int &size, int tailX, int tailY, int &points);  // Show and eat items
bool IsGameOver(int snakeX[], int snakeY[], int size);                                                      // Check if game is over
void HighScore(int points);                                                                                 // Read and saves high scores

// MAIN
int main()
{
	int size = 3;                  // Set snakes initial size to 3
	int item_count = 0;
	int points = 0;
	int snakeX[100], snakeY[100], tempX[100], tempY[100];

	Initialize(size, snakeX, snakeY);
	BuildLevel();
	Update(size, snakeX, snakeY, tempX, tempY, item_count, points);
	HighScore(points);

	_getch();
	return 0;
}

// INITIALIZE SNAKE
void Initialize(int size, int snakeX[], int snakeY[])
{
	snakeX[0] = WIDTH / 2;     snakeY[0] = 3;  // Initialize snakes initial position
	snakeX[1] = WIDTH / 2;     snakeY[1] = 2;
	snakeX[2] = WIDTH / 2;     snakeY[2] = 1;
	for (int i = 3; i < 100; i++)
	{
		snakeX[i] = NULL;
		snakeY[i] = NULL;
	}

	// Set snakes initial position in level
	for (int i = 0; i < size; i++)
		Level[snakeY[i]][snakeX[i]] = 'o';
}

// BUILD LEVEL
void BuildLevel()
{
	for (int i = 0; i<height;>	{
		for (int j = 0; j<width;>		{
			Level[0][j] = '*';
			Level[i][0] = '*';
			Level[i][WIDTH - 1] = '*';
			Level[HEIGHT - 1][j] = '*';
		}
	}
}

// DISPLAY LEVEL
void ReDraw()
{
	for (int i = 0; i < HEIGHT; i++)
	{
		cout << endl;
		for (int j = 0; j < WIDTH; j++)
			 cout << " " << Level[i][j];
	}
}

// CLEAR SCREEN
void ClearScreen()
{
	HANDLE hOut;
	COORD Position;
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	Position.X = 0;
	Position.Y = 0;
	SetConsoleCursorPosition(hOut, Position);
}

// UPDATE
void Update(int &size, int snakeX[], int snakeY[], int tempX[], int tempY[], int &item_count, int &points)
{
	int count = 0;
	char input = ' ';
	char previnput = 's';
	int tailX, tailY;
	bool gameOver = false;
	vector<int> itemX, itemY;

	while (!gameOver)                           // Loops until game is over
	{
		SpeedUpdate();                          // Speed

		// Save tail to delete trace as it moves
		tailY = snakeY[size - 1];
		tailX = snakeX[size - 1];

		// Delete previous tail trace
		Level[tailY][tailX] = ' ';
		Items(itemX, itemY, item_count, snakeX, snakeY, size, tailX, tailY, points);

		// Copy snake (except tail) into temp array, and displace 1 element to the right
		// Leave the first element empty for head
		for (int i = 0; i < size - 1; i++)
		{
			tempX[i + 1] = snakeX[i];            // copy y values
			tempY[i + 1] = snakeY[i];          // copy x values
		}

		// Copy a duplicate of the head into first element so it can be moved by user
		tempX[0] = snakeX[0];
		tempY[0] = snakeY[0];

		// Copy temp array back into snake array, including previous head position
		// First 2 elements will be a duplicate of the head with same x and y position
		for (int i = 0; i < size; i++)
		{
			snakeX[i] = tempX[i];              // Copy y values
			snakeY[i] = tempY[i];              // Copy x values
		}

		// Stores keystroke
		if (_kbhit())
			input = _getch();

		// WHILE MOVING DOWN
		if (previnput == 's')
		{
			snakeY[0] += 1;                           // Set heads new position
			if (input == 'a'  || input == 'A')        // Go left
				previnput = 'a';
			else if (input == 'd'  || input == 'D')   // Go right
				previnput = 'd';
		}
		// WHILE MOVING UP
		else if (previnput == 'w')
		{
			snakeY[0] -= 1;                            // Set heads new position
			if (input == 'a'  || input == 'A')         // Go left
				previnput = 'a';
			else if (input == 'd'  || input == 'D')    // Go right
				previnput = 'd';
		}
		// WHILE MOVING RIGHT
		else if (previnput == 'd')
		{
			snakeX[0] += 1;                         // Set heads new position
			if (input == 'w' || input == 'W')       // Go up
				previnput = 'w';
			else if (input == 's' || input == 'S')  // Go down
				previnput = 's';
		}
		// WHILE MOVING LEFT
		else if (previnput == 'a')
		{
			snakeX[0] -= 1;                         // Set heads new position
			if (input == 'w' || input == 'N')       // Go up
				previnput = 'w';
			else if (input == 's' || input == 'S')  // Go down
				previnput = 's';
		}

		// Set snakes new position
		for (int i = 0; i < size; i++)
			Level[snakeY[i]][snakeX[i]] = 'o';

		// Check if game is over 
		gameOver = IsGameOver(tempX, tempY, size);
		if (gameOver == true)
		{
			cout << "\a\a";
			break;
		}

		// Redraw
		ClearScreen();
		ReDraw();
	}
}

// ITEMS
void Items(vector<int> &itemX, vector<int> &itemY, int &item_count, int snakeX[], int snakeY[], int &size, int tailX, int tailY, int &points)
{
	clock_t interval = clock() % 3000;
	cout << "\t\t    Points: " << points << endl;

	// Show items at certain intervals
	if (interval > 2800)
	{
		item_count++;
		srand((unsigned)time(NULL));
		// Item is placed at random locations
		itemX.push_back( rand() % (WIDTH - 2) + 1);
		itemY.push_back( rand() % (HEIGHT - 2) + 1);

		Level[itemY.back()][itemX.back()] = '@';
	}

	// Check collision with item
	for (int i = 0; i < item_count; i++)
	{
		if ( (snakeX[0] == itemX.at(i)) && (snakeY[0] == itemY.at(i)) )
		{
			points += 100;
			// Deletes item
			item_count--;
			itemY.erase(itemY.begin() + i);
			itemX.erase(itemX.begin() + i);
			// Snake grows
			size++;
			snakeX[size - 1] = tailX;
			snakeY[size - 1] = tailY;
			cout << "\a";
		}
	}
}

// SPEED
void SpeedUpdate()
{
	if (clock() <= 9000)                                 // Level 1
	{
		Sleep(100);
		cout << endl << " Level 1";
	}
	else if ((clock() > 9000) && (clock() < 18000))      // Level 2
	{
		Sleep(50);
		cout << endl << " Level 2";
	}
	else if ((clock() > 18000) && (clock() < 36000))      // Level 3
	{
		Sleep(25);
		cout << endl << " Level 3";
	}
	else
		cout << endl << " Level 4";                       // Level 4

}

// IS GAME OVER
bool IsGameOver(int snakeX[], int snakeY[], int size)
{
	// If snake collides with tail
	for (int i = 2; i << size; i++)
	{
		if ( (snakeX[0] == snakeX[i]) && (snakeY[0] == snakeY[i]) )
		{
			cout << endl << "\t\t  YOU LOSE!";
			_getch();
			return true;
		}
	}
	if ((snakeX[0] == WIDTH - 1) || (snakeY[0] == HEIGHT - 1) || (snakeX[0] == 0) || (snakeY[0] == 0))
	{
		cout << endl << "\t\t  YOU LOSE!";
		_getch();
		return true;
	}
	else
		return false;
}
// HIGH SCORES
void HighScore(int points)
{
	char fileName[] = "HighScore.txt";
	int score[5];
	int temp[5];
	int count = 0;
	int position = 5;
	bool save = false;

	system("cls");                                        // Clear Screen
	ifstream inputFile;
	inputFile.open(fileName);                             // Read from file

	while (inputFile.eof())                              // Read until end of file
	{
		inputFile >> score[count];                        // Extracts current points from file and store array
		count++;
	}
	inputFile.close();                                    // Close file

	for (int i = 4; i > 0; i--)                           // Check if score is to be save in board
	{
		if (points > score[i])                            // If score is higher than scores in board
		{
			if (position > 0)
				position--;                               // Increase position
			save = true;                                  // Set save to true
		}
	}

	if (save == true)                                     // Save score in sorted array
	{
		if (position == 0)
			cout << "CONGRATULATIONS, YOU HAVE ACHIEVED THE HIGHEST SCORE!" << endl;
		else
			cout << "Well done, you are now raked #" << position + 1 << "!" << endl;

		for (int i = 4; i >= position; i--)
			temp[i + 1] = score[i];                       // Copies scores to be rearranged into temp array

		for (int i = 4; i >= position + 1; i--)
			score[i] = temp[i];                           // Rearranges ranking

		cout << endl << "Score: " << points << endl << endl;
		score[position] = points;                         // Saves user score in the correct position

		ofstream outputFile;
		outputFile.open(fileName);                        // Write to file

		cout << "HIGH SCORES" << endl;
		cout << "-----------" << endl;
		for (int i = 0; i < 5; i++)
		{
			cout << i + 1 << ". " << score[i] << endl;
			outputFile << score[i] << endl;               // Overwrite file with new scoreboard
		}

		outputFile.close();                               // Close file 
	}
	else
	{
		cout << "You did't make it to the hall of fame..." << endl << "Make sure you do better next time!" << endl;
		cout << endl << "Score: " << points << endl << endl;

		inputFile.open(fileName);                         // Read from file
		while (!inputFile.eof())                          // Read until end of file
			inputFile >> score[count];                    // Extracts current points from file and store into array

		cout << "HIGH SCORES" << endl;
		cout << "-----------" << endl;
		for (int i = 0; i < 5; i++)
			cout << i + 1 << ". " << score[i] << endl;
		inputFile.close();                                // Close file
	}
}

推荐答案

As already mentioned by Richard, the stdafx.h file is a Microsoft specific file used when enabling precompiled headers. If you don’t use Visual Studio or VS without precompiled headers it must not be included.



You should use a debugger to set breakpoints to find out why your program stops playing.



However, this line in IsGameOver looks suspicious:

As already mentioned by Richard, the stdafx.h file is a Microsoft specific file used when enabling precompiled headers. If you don't use Visual Studio or VS without precompiled headers it must not be included.

You should use a debugger to set breakpoints to find out why your program stops playing.

However, this line in IsGameOver looks suspicious:
for (int i = 2; i << size; i++)


这篇关于我有(不能打开源文件&“Stdafx.H”错误)如果我删除它我的游戏运行但继续得分板,为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆