/ / Console textgame.exe działa na Windows 7, a nie na vista ... DLACZEGO? - Windows, konsola, kompatybilność

Console textgame.exe działa na Windows 7, a nie na vista ... DLACZEGO? - Windows, konsola, kompatybilność

Hej, więc zrobiłem grę tekstową przy użyciu biblioteki pdCurses i narzędzi systemu operacyjnego Microsoftu. Oto moje załączniki i spojrzenie poniżej na inne wyjaśnienia:

#include <iostream>
#include <time.h> // or "ctime"
#include <stdio.h> // for
#include <cstdlib>
#include <Windows.h>
#include <conio.h>
#include<curses.h>
#include <algorithm>
#include <string>
#include <vector>
#include <sstream>
#include <ctime>

#include <myStopwatch.h> // for keeping times
#include <myMath.h>      // numb_digits() and digit_val();

myStopwath / Math.h zawiera:

#include <stdio.h>
#include <math.h>
#include <tchar.h>

Więc testowałem grę (która zawiera folderzawierające .exe i pdcurses.dll) na moim komputerze z systemem Windows 7 i działa świetnie, jednak gdy uruchomisz go na innym komputerze, który ma vista lub starsze, pojawia się moja gra, ale natychmiast kończy się z powodu utraty wszystkich graczy prawie życie natychmiast ... jak to możliwe?

Jeśli chcesz zobaczyć pełny kod źródłowy, przejdź do tego Połączyć

Dzięki!

Odpowiedzi:

6 dla odpowiedzi № 1

W głównej pętli gry nie inicjujesz pliku coll zmienna przed przekazaniem jej do theScreen.check_collision(). Jeśli gracz nie jest w niebezpieczeństwie, to tofunkcja nie aktualizuje tej wartości. Wracając do głównej pętli, nie sprawdzasz wartości zwracanej przez check_collision (), a program podejmuje teraz decyzje na podstawie niezainicjowanej wartości w tej zmiennej. Witamy w szerokim świecie niezdefiniowanych zachowań.

Prawdopodobnie różnica, którą widziszróżne systemy operacyjne są spowodowane sposobem uruchamiania różnych stron pamięci przez różne menedżery sterty, nawet jeśli twój odtwarzacz przetrwa przez chwilę, po pierwszej kolizji, ta lokalizacja pamięci zawiera teraz "X", która nigdy nie jest wyczyszczona, a wynik jest jest nadal "nieokreślony", na większości architektur, spowoduje to zarejestrowanie nowej kolizji w każdej iteracji, wyjaśniając, dlaczego twoje "życie" znika tak szybko.

Dwie rzeczy, które musisz zrobić, aby to naprawić:

  1. Wszystkie ścieżki kodu za pomocą check_collision muszą pisaćdo parametru wyjściowego "buff". Najprostszym sposobem na zrobienie tego jest zainicjowanie go na 0 w pierwszym wierszu funkcji. (Alternatywnie, jeśli ma to być parametr wejściowy / wyjściowy, musisz zainicjować go w głównej pętli przed wywołaniem check_collision ())
  2. Podejmij decyzję na podstawie wartości zwracanej przez check_collision (), a nie na wyjściu. (Lub, jeśli ta zwracana wartość naprawdę nie jest ważna, zmień typ zwracanej funkcji, aby anulować)

0 dla odpowiedzi nr 2

Na linii 23 w ciągach linii brakuje przecinka na końcu. Nie myśl, że to twoja sprawa, ale to też nie może być dobre.

Nie powiedziałeś, że przekompilowałeś go osobno pod każdym systemem operacyjnym (Vista itp.), A jeśli dokonałeś ponownej kompilacji, użyłeś tej samej wersji kompilatora.


0 dla odpowiedzi № 3

Windows 7 dostarczany z środowiskiem wykonawczym Visual C ++ 2008. Windows Vista został dostarczony w środowisku wykonawczym Visual C ++ 2005. XP dostarczany z środowiskiem wykonawczym Visual C ++ 6.0.

Odkąd skompilowałeś aplikację w Visual Studio 2010, najprawdopodobniej nie została ona skompilowana do kierowania na starsze systemy operacyjne.

Spróbuj zainstalować najnowsze środowiska uruchomieniowe na maszynie, z którą testujesz i jeśli to działa po tym, wiesz, aby ponownie skompilować swój projekt do obsługi starszych systemów operacyjnych.

http://www.microsoft.com/download/en/details.aspx?id=5555 x86 http://www.microsoft.com/download/en/details.aspx?id=14632 x64