7

Visual Studio 2015 で SFML を使用して単純なグラフィカル スネーク ゲームをプログラムし、メイン コンピューターで完全に実行しました。そして、ラップトップで試してみるべきだと思いました。プログラムを実行すると、次のエラーが表示されました: システム エラー: MSVCP140D.DLL がコンピューターにないため、プログラムを開始できません。この問題を解決するためにプログラムを再インストールしてみてください 。コンピューターで検索して見つけたので、ラップトップにコピーすると、別のエラーが表示されました。 アプリケーションエラー: アプリケーションを正しく開始できませんでした (0xc000007b). [OK] をクリックして、アプリケーションを閉じます。 Microsoft Visual C++ 再頒布可能パッケージを再インストールしようとしましたが、それでも機能しませんでした。(ところで、これはコードの問題ではなく、SFML を正しくインストールし、そのライブラリとビンを問題なく使用しました)。あなたの助けは私にとって大きな意味があります。ありがとうございました!これが私のコードです:

// 
GraphicalLoopSnakeGame.cpp : 
Defines the entry point for 
the console application.
//
#include "stdafx.h"
#include <SFML/Graphics.hpp>
#include <time.h>
using namespace sf;

int N = 30, M = 20;
int size = 16;
int w = size*N;
int h = size*M;

int dir, num = 4;

struct Snake
{
    int x, y;
}       s[100];

struct Fruit
{
    int x, y;
}   f;

void Tick()
{
    for (int i = num;i>0;--i)
{
        s[i].x = s[i - 1].x; 
        s[i].y = s[i - 1].y;
}

if (dir == 0) s[0].y += 1;
if (dir == 1) s[0].x -= 1;
if (dir == 2) s[0].x += 1;
if (dir == 3) s[0].y -= 1;

if ((s[0].x == f.x) && (s[0].y == f.y))
{
    num++; f.x = rand() % N; f.y = rand() % M;
}

if (s[0].x>N) s[0].x = 0;  if (s[0].x<0) s[0].x = N;
if (s[0].y>M) s[0].y = 0;  if (s[0].y<0) s[0].y = M;

for (int i = 1;i<num;i++)
    if (s[0].x == s[i].x && s[0].y == s[i].y)  num = i;
}

int main()
{
        srand(time(0));
        RenderWindow 
    window(VideoMode(w, h), 
"Snake Game!");

Texture t1, t2, t3; 
t1.loadFromFile("images/white.png");
t2.loadFromFile("images/red.png");
t3.loadFromFile("images/green.png");

Sprite sprite1(t1);
Sprite sprite2(t2);
Sprite sprite3(t3);

Clock clock;
float timer = 0, delay = 0.12;

f.x = 10;
f.y = 10;

while (window.isOpen())
{
    float time = clock.getElapsedTime().asSeconds();
    clock.restart();
    timer += time;

    Event e;
    while (window.pollEvent(e))
    {
        if (e.type == Event::Closed)
            window.close();
    }

    if (Keyboard::isKeyPressed(Keyboard::Left)) dir = 1;
    if (Keyboard::isKeyPressed(Keyboard::Right)) dir = 2;
    if (Keyboard::isKeyPressed(Keyboard::Up)) dir = 3;
    if (Keyboard::isKeyPressed(Keyboard::Down)) dir = 0;

    if (timer>delay) { timer = 0; Tick(); }

    ////// draw  ///////
    window.clear();

    for (int i = 0; i<N; i++)
        for (int j = 0; j<M; j++)
        {
            sprite1.setPosition(i*size, j*size);  window.draw(sprite1);
        }

    for (int i = 0;i<num;i++)
    {
        sprite2.setPosition(s[i].x*size, s[i].y*size);  window.draw(sprite2);
    }

    sprite3.setPosition(f.x*size, f.y*size);  window.draw(sprite3);

    window.display();
}

return 0;
}
4

2 に答える 2

12

デバッグ ビジュアル スタジオ ランタイムを使用しています。別のコンピューターで試してみたい場合は、コードをリリース モードで再コンパイルし、適切なビジュアル スタジオ ランタイム再頒布可能パッケージがインストールされていることを確認してください。

別のマシンでデバッグ実行可能ファイルを実行する必要がある場合は、正しいランタイム (プログラムのコンパイル方法に応じて 32 ビットまたは 64 ビット) をコピーする必要がありますC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Redist\MSVC\14.24.28127\debug_nonredist。 2019 では、正確なパスは Visual Studio のバージョンによって若干異なります (例: Visual Studio 2015 の使用C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\debug_nonredist)。

于 2020-01-09T11:29:24.353 に答える