Latest commit

History

History
89 lines (62 loc) · 4.63 KB

File metadata and controls

89 lines (62 loc) · 4.63 KB

OurGame - The ZombiNTU

Hi there! This is our final project of the course EE1004 Computer Programming at National Taiwan University (NTU). We created this game using the programming language Python and the game-design module Pygame. Hope you will like it!

Story

ZombiNTU is a survival horror video game featuring the elements at NTU. The game's story revolves around the student's life at the time of 2050, where the campus was occupied by tons of zombies after the massive invasion in 2020. According to humans' last message back then, the zombies climb out from brown underground tunnels at the northwest and southeast corners. Also, the abundance of coconuts on the campus serves as the only means for survival, and it is said that there are weapons and magic inside. The predecessors already created some accelerating tunnels and shelter blocks in the campus, which provide you a way to hide or escape from the zombies. Be noticed that if the number of zombies exceeds 30, the campus will collapse... You are our last hope to defend the territory and honor of NTU.

File structure

.
├── README.md
├── character.py
├── tilemap.py
├── main.py
├── materials
└── score.csv

Dependent python libraries

numpy == 1.19.5
pandas == 1.2.0
pygame == 2.0.1
python-dateutil == 2.8.1
PyTMX == 3.24
pytz == 2020.5
six == 1.15.0

Code description

  • main.py:
    • This is where we run the main loop
    • Currently the FPS of the game is set to 60
  • character.py:
    • We build class Charater, Player, Enemy, Bullet and Coconut. Notice that classes Player and Enemy are inharitted from class Character
  • tilemap.py:
    • Where we build class related to the background map, Tiledmap, Camera, Obstacle, Proof and Block.
  • materials:
    • Where we store the game images, including characters' sprite sheets, background picture, and so on

Game instruction

  1. git clone https://github.com/PythonFinalProject/OurGame.git
  2. Run the main.py and you will have a pop up window.
  3. If you need any assist during the game, click SET and then HELP on the game window.

Bug and Problem report

  • ZeroDivisionError: float division by zero (12/27):

    • seldom happened. In character.py,line 183, self.x += self.vel*dx/dl dl = 0???
  • python pass by value or reference (12/21):

    • In order to force python pass the variable "run" as reference, Nelson set "run" as a list "[True]"
  • arrow key "UP" didn't work in 2P mode (12/21):

    • Previously Nelson used arrow keys to control the second player but faced some problem: the second player couldn't shoot bullets while moving up. After changing control keys to "IJKL", everything works perfect
  • PNG warning (12/21):

    • Previouly everytime Nelson created character using the png file "blue_woman_sprite.png" and "skull_sprite.png", the command window would print out warning message: "libpng warning: iCCP: known incorrect sRGB profile". This issue was caused because Libpng-1.6 is more stringent about checking ICC profiles than previous versions. We can ignore the warning. To get rid of it, remove the iCCP chunk from the PNG image by running the command "mogrify *.png" (Nelson ran it in WSL2 device, might not be able to run in Windows powershell)

Game detail information

  • chen

    Before starting the main game loop, we create a game interface to enhance user's gameplay experience.

    For example, players can choose either single or cooperative mode or get help by clicking Set button.

    After the game starts, some basic game information are displayed on the game window, for example, players' health, current weapon, and the bullet left for special weapon (So don't relax even if you get really strong weapon!). The game ends if all the players died or more than 30 enemies appear on the map (Notice the "Warning" for the latter) .

    Another game interface design is displayed if the game ends. The Score displayed the top ten highest scores recorded (the score are recorded automatically) and users can easily reset the score record if they want. Click "Again" to restart a game.

  • ChiaLingWeng

    There are 3 different types of objects in our maps, Stone, Proof and Block.

    -Stone: It acts as an obstacle for Characters moving on x axis, but an accelerating tunnel for Characters moving on y axis.

    -Proof: Just as literally, this kind of object is bullet-proof and the bullet will disappear after colliding with it.

    -Block: Different from Stone, Characters can't pass it from any direction, but it's destroyable with bullet.

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

History
89 lines (62 loc) · 4.63 KB

File metadata and controls

89 lines (62 loc) · 4.63 KB

OurGame - The ZombiNTU

Hi there! This is our final project of the course EE1004 Computer Programming at National Taiwan University (NTU). We created this game using the programming language Python and the game-design module Pygame. Hope you will like it!

Story

ZombiNTU is a survival horror video game featuring the elements at NTU. The game's story revolves around the student's life at the time of 2050, where the campus was occupied by tons of zombies after the massive invasion in 2020. According to humans' last message back then, the zombies climb out from brown underground tunnels at the northwest and southeast corners. Also, the abundance of coconuts on the campus serves as the only means for survival, and it is said that there are weapons and magic inside. The predecessors already created some accelerating tunnels and shelter blocks in the campus, which provide you a way to hide or escape from the zombies. Be noticed that if the number of zombies exceeds 30, the campus will collapse... You are our last hope to defend the territory and honor of NTU.

File structure

.
├── README.md
├── character.py
├── tilemap.py
├── main.py
├── materials
└── score.csv

Dependent python libraries

numpy == 1.19.5
pandas == 1.2.0
pygame == 2.0.1
python-dateutil == 2.8.1
PyTMX == 3.24
pytz == 2020.5
six == 1.15.0

Code description

  • main.py:
    • This is where we run the main loop
    • Currently the FPS of the game is set to 60
  • character.py:
    • We build class Charater, Player, Enemy, Bullet and Coconut. Notice that classes Player and Enemy are inharitted from class Character
  • tilemap.py:
    • Where we build class related to the background map, Tiledmap, Camera, Obstacle, Proof and Block.
  • materials:
    • Where we store the game images, including characters' sprite sheets, background picture, and so on

Game instruction

  1. git clone https://github.com/PythonFinalProject/OurGame.git
  2. Run the main.py and you will have a pop up window.
  3. If you need any assist during the game, click SET and then HELP on the game window.

Bug and Problem report

  • ZeroDivisionError: float division by zero (12/27):

    • seldom happened. In character.py,line 183, self.x += self.vel*dx/dl dl = 0???
  • python pass by value or reference (12/21):

    • In order to force python pass the variable "run" as reference, Nelson set "run" as a list "[True]"
  • arrow key "UP" didn't work in 2P mode (12/21):

    • Previously Nelson used arrow keys to control the second player but faced some problem: the second player couldn't shoot bullets while moving up. After changing control keys to "IJKL", everything works perfect
  • PNG warning (12/21):

    • Previouly everytime Nelson created character using the png file "blue_woman_sprite.png" and "skull_sprite.png", the command window would print out warning message: "libpng warning: iCCP: known incorrect sRGB profile". This issue was caused because Libpng-1.6 is more stringent about checking ICC profiles than previous versions. We can ignore the warning. To get rid of it, remove the iCCP chunk from the PNG image by running the command "mogrify *.png" (Nelson ran it in WSL2 device, might not be able to run in Windows powershell)

Game detail information

  • chen

    Before starting the main game loop, we create a game interface to enhance user's gameplay experience.

    For example, players can choose either single or cooperative mode or get help by clicking Set button.

    After the game starts, some basic game information are displayed on the game window, for example, players' health, current weapon, and the bullet left for special weapon (So don't relax even if you get really strong weapon!). The game ends if all the players died or more than 30 enemies appear on the map (Notice the "Warning" for the latter) .

    Another game interface design is displayed if the game ends. The Score displayed the top ten highest scores recorded (the score are recorded automatically) and users can easily reset the score record if they want. Click "Again" to restart a game.

  • ChiaLingWeng

    There are 3 different types of objects in our maps, Stone, Proof and Block.

    -Stone: It acts as an obstacle for Characters moving on x axis, but an accelerating tunnel for Characters moving on y axis.

    -Proof: Just as literally, this kind of object is bullet-proof and the bullet will disappear after colliding with it.

    -Block: Different from Stone, Characters can't pass it from any direction, but it's destroyable with bullet.

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
89 lines (62 loc) · 4.63 KB

File metadata and controls

89 lines (62 loc) · 4.63 KB

OurGame - The ZombiNTU

Hi there! This is our final project of the course EE1004 Computer Programming at National Taiwan University (NTU). We created this game using the programming language Python and the game-design module Pygame. Hope you will like it!

Story

ZombiNTU is a survival horror video game featuring the elements at NTU. The game's story revolves around the student's life at the time of 2050, where the campus was occupied by tons of zombies after the massive invasion in 2020. According to humans' last message back then, the zombies climb out from brown underground tunnels at the northwest and southeast corners. Also, the abundance of coconuts on the campus serves as the only means for survival, and it is said that there are weapons and magic inside. The predecessors already created some accelerating tunnels and shelter blocks in the campus, which provide you a way to hide or escape from the zombies. Be noticed that if the number of zombies exceeds 30, the campus will collapse... You are our last hope to defend the territory and honor of NTU.

File structure

.
├── README.md
├── character.py
├── tilemap.py
├── main.py
├── materials
└── score.csv

Dependent python libraries

numpy == 1.19.5
pandas == 1.2.0
pygame == 2.0.1
python-dateutil == 2.8.1
PyTMX == 3.24
pytz == 2020.5
six == 1.15.0

Code description

  • main.py:
    • This is where we run the main loop
    • Currently the FPS of the game is set to 60
  • character.py:
    • We build class Charater, Player, Enemy, Bullet and Coconut. Notice that classes Player and Enemy are inharitted from class Character
  • tilemap.py:
    • Where we build class related to the background map, Tiledmap, Camera, Obstacle, Proof and Block.
  • materials:
    • Where we store the game images, including characters' sprite sheets, background picture, and so on

Game instruction

  1. git clone https://github.com/PythonFinalProject/OurGame.git
  2. Run the main.py and you will have a pop up window.
  3. If you need any assist during the game, click SET and then HELP on the game window.

Bug and Problem report

  • ZeroDivisionError: float division by zero (12/27):

    • seldom happened. In character.py,line 183, self.x += self.vel*dx/dl dl = 0???
  • python pass by value or reference (12/21):

    • In order to force python pass the variable "run" as reference, Nelson set "run" as a list "[True]"
  • arrow key "UP" didn't work in 2P mode (12/21):

    • Previously Nelson used arrow keys to control the second player but faced some problem: the second player couldn't shoot bullets while moving up. After changing control keys to "IJKL", everything works perfect
  • PNG warning (12/21):

    • Previouly everytime Nelson created character using the png file "blue_woman_sprite.png" and "skull_sprite.png", the command window would print out warning message: "libpng warning: iCCP: known incorrect sRGB profile". This issue was caused because Libpng-1.6 is more stringent about checking ICC profiles than previous versions. We can ignore the warning. To get rid of it, remove the iCCP chunk from the PNG image by running the command "mogrify *.png" (Nelson ran it in WSL2 device, might not be able to run in Windows powershell)

Game detail information

  • chen

    Before starting the main game loop, we create a game interface to enhance user's gameplay experience.

    For example, players can choose either single or cooperative mode or get help by clicking Set button.

    After the game starts, some basic game information are displayed on the game window, for example, players' health, current weapon, and the bullet left for special weapon (So don't relax even if you get really strong weapon!). The game ends if all the players died or more than 30 enemies appear on the map (Notice the "Warning" for the latter) .

    Another game interface design is displayed if the game ends. The Score displayed the top ten highest scores recorded (the score are recorded automatically) and users can easily reset the score record if they want. Click "Again" to restart a game.

  • ChiaLingWeng

    There are 3 different types of objects in our maps, Stone, Proof and Block.

    -Stone: It acts as an obstacle for Characters moving on x axis, but an accelerating tunnel for Characters moving on y axis.

    -Proof: Just as literally, this kind of object is bullet-proof and the bullet will disappear after colliding with it.

    -Block: Different from Stone, Characters can't pass it from any direction, but it's destroyable with bullet.

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
89 lines (62 loc) · 4.63 KB

File metadata and controls

89 lines (62 loc) · 4.63 KB

OurGame - The ZombiNTU

Hi there! This is our final project of the course EE1004 Computer Programming at National Taiwan University (NTU). We created this game using the programming language Python and the game-design module Pygame. Hope you will like it!

Story

ZombiNTU is a survival horror video game featuring the elements at NTU. The game's story revolves around the student's life at the time of 2050, where the campus was occupied by tons of zombies after the massive invasion in 2020. According to humans' last message back then, the zombies climb out from brown underground tunnels at the northwest and southeast corners. Also, the abundance of coconuts on the campus serves as the only means for survival, and it is said that there are weapons and magic inside. The predecessors already created some accelerating tunnels and shelter blocks in the campus, which provide you a way to hide or escape from the zombies. Be noticed that if the number of zombies exceeds 30, the campus will collapse... You are our last hope to defend the territory and honor of NTU.

File structure

.
├── README.md
├── character.py
├── tilemap.py
├── main.py
├── materials
└── score.csv

Dependent python libraries

numpy == 1.19.5
pandas == 1.2.0
pygame == 2.0.1
python-dateutil == 2.8.1
PyTMX == 3.24
pytz == 2020.5
six == 1.15.0

Code description

  • main.py:
    • This is where we run the main loop
    • Currently the FPS of the game is set to 60
  • character.py:
    • We build class Charater, Player, Enemy, Bullet and Coconut. Notice that classes Player and Enemy are inharitted from class Character
  • tilemap.py:
    • Where we build class related to the background map, Tiledmap, Camera, Obstacle, Proof and Block.
  • materials:
    • Where we store the game images, including characters' sprite sheets, background picture, and so on

Game instruction

  1. git clone https://github.com/PythonFinalProject/OurGame.git
  2. Run the main.py and you will have a pop up window.
  3. If you need any assist during the game, click SET and then HELP on the game window.

Bug and Problem report

  • ZeroDivisionError: float division by zero (12/27):

    • seldom happened. In character.py,line 183, self.x += self.vel*dx/dl dl = 0???
  • python pass by value or reference (12/21):

    • In order to force python pass the variable "run" as reference, Nelson set "run" as a list "[True]"
  • arrow key "UP" didn't work in 2P mode (12/21):

    • Previously Nelson used arrow keys to control the second player but faced some problem: the second player couldn't shoot bullets while moving up. After changing control keys to "IJKL", everything works perfect
  • PNG warning (12/21):

    • Previouly everytime Nelson created character using the png file "blue_woman_sprite.png" and "skull_sprite.png", the command window would print out warning message: "libpng warning: iCCP: known incorrect sRGB profile". This issue was caused because Libpng-1.6 is more stringent about checking ICC profiles than previous versions. We can ignore the warning. To get rid of it, remove the iCCP chunk from the PNG image by running the command "mogrify *.png" (Nelson ran it in WSL2 device, might not be able to run in Windows powershell)

Game detail information

  • chen

    Before starting the main game loop, we create a game interface to enhance user's gameplay experience.

    For example, players can choose either single or cooperative mode or get help by clicking Set button.

    After the game starts, some basic game information are displayed on the game window, for example, players' health, current weapon, and the bullet left for special weapon (So don't relax even if you get really strong weapon!). The game ends if all the players died or more than 30 enemies appear on the map (Notice the "Warning" for the latter) .

    Another game interface design is displayed if the game ends. The Score displayed the top ten highest scores recorded (the score are recorded automatically) and users can easily reset the score record if they want. Click "Again" to restart a game.

  • ChiaLingWeng

    There are 3 different types of objects in our maps, Stone, Proof and Block.

    -Stone: It acts as an obstacle for Characters moving on x axis, but an accelerating tunnel for Characters moving on y axis.

    -Proof: Just as literally, this kind of object is bullet-proof and the bullet will disappear after colliding with it.

    -Block: Different from Stone, Characters can't pass it from any direction, but it's destroyable with bullet.

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

History
89 lines (62 loc) · 4.63 KB

File metadata and controls

89 lines (62 loc) · 4.63 KB

OurGame - The ZombiNTU

Hi there! This is our final project of the course EE1004 Computer Programming at National Taiwan University (NTU). We created this game using the programming language Python and the game-design module Pygame. Hope you will like it!

Story

ZombiNTU is a survival horror video game featuring the elements at NTU. The game's story revolves around the student's life at the time of 2050, where the campus was occupied by tons of zombies after the massive invasion in 2020. According to humans' last message back then, the zombies climb out from brown underground tunnels at the northwest and southeast corners. Also, the abundance of coconuts on the campus serves as the only means for survival, and it is said that there are weapons and magic inside. The predecessors already created some accelerating tunnels and shelter blocks in the campus, which provide you a way to hide or escape from the zombies. Be noticed that if the number of zombies exceeds 30, the campus will collapse... You are our last hope to defend the territory and honor of NTU.

File structure

.
├── README.md
├── character.py
├── tilemap.py
├── main.py
├── materials
└── score.csv

Dependent python libraries

numpy == 1.19.5
pandas == 1.2.0
pygame == 2.0.1
python-dateutil == 2.8.1
PyTMX == 3.24
pytz == 2020.5
six == 1.15.0

Code description

  • main.py:
    • This is where we run the main loop
    • Currently the FPS of the game is set to 60
  • character.py:
    • We build class Charater, Player, Enemy, Bullet and Coconut. Notice that classes Player and Enemy are inharitted from class Character
  • tilemap.py:
    • Where we build class related to the background map, Tiledmap, Camera, Obstacle, Proof and Block.
  • materials:
    • Where we store the game images, including characters' sprite sheets, background picture, and so on

Game instruction

  1. git clone https://github.com/PythonFinalProject/OurGame.git
  2. Run the main.py and you will have a pop up window.
  3. If you need any assist during the game, click SET and then HELP on the game window.

Bug and Problem report

  • ZeroDivisionError: float division by zero (12/27):

    • seldom happened. In character.py,line 183, self.x += self.vel*dx/dl dl = 0???
  • python pass by value or reference (12/21):

    • In order to force python pass the variable "run" as reference, Nelson set "run" as a list "[True]"
  • arrow key "UP" didn't work in 2P mode (12/21):

    • Previously Nelson used arrow keys to control the second player but faced some problem: the second player couldn't shoot bullets while moving up. After changing control keys to "IJKL", everything works perfect
  • PNG warning (12/21):

    • Previouly everytime Nelson created character using the png file "blue_woman_sprite.png" and "skull_sprite.png", the command window would print out warning message: "libpng warning: iCCP: known incorrect sRGB profile". This issue was caused because Libpng-1.6 is more stringent about checking ICC profiles than previous versions. We can ignore the warning. To get rid of it, remove the iCCP chunk from the PNG image by running the command "mogrify *.png" (Nelson ran it in WSL2 device, might not be able to run in Windows powershell)

Game detail information

  • chen

    Before starting the main game loop, we create a game interface to enhance user's gameplay experience.

    For example, players can choose either single or cooperative mode or get help by clicking Set button.

    After the game starts, some basic game information are displayed on the game window, for example, players' health, current weapon, and the bullet left for special weapon (So don't relax even if you get really strong weapon!). The game ends if all the players died or more than 30 enemies appear on the map (Notice the "Warning" for the latter) .

    Another game interface design is displayed if the game ends. The Score displayed the top ten highest scores recorded (the score are recorded automatically) and users can easily reset the score record if they want. Click "Again" to restart a game.

  • ChiaLingWeng

    There are 3 different types of objects in our maps, Stone, Proof and Block.

    -Stone: It acts as an obstacle for Characters moving on x axis, but an accelerating tunnel for Characters moving on y axis.

    -Proof: Just as literally, this kind of object is bullet-proof and the bullet will disappear after colliding with it.

    -Block: Different from Stone, Characters can't pass it from any direction, but it's destroyable with bullet.

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
89 lines (62 loc) · 4.63 KB

File metadata and controls

89 lines (62 loc) · 4.63 KB

OurGame - The ZombiNTU

Hi there! This is our final project of the course EE1004 Computer Programming at National Taiwan University (NTU). We created this game using the programming language Python and the game-design module Pygame. Hope you will like it!

Story

ZombiNTU is a survival horror video game featuring the elements at NTU. The game's story revolves around the student's life at the time of 2050, where the campus was occupied by tons of zombies after the massive invasion in 2020. According to humans' last message back then, the zombies climb out from brown underground tunnels at the northwest and southeast corners. Also, the abundance of coconuts on the campus serves as the only means for survival, and it is said that there are weapons and magic inside. The predecessors already created some accelerating tunnels and shelter blocks in the campus, which provide you a way to hide or escape from the zombies. Be noticed that if the number of zombies exceeds 30, the campus will collapse... You are our last hope to defend the territory and honor of NTU.

File structure

.
├── README.md
├── character.py
├── tilemap.py
├── main.py
├── materials
└── score.csv

Dependent python libraries

numpy == 1.19.5
pandas == 1.2.0
pygame == 2.0.1
python-dateutil == 2.8.1
PyTMX == 3.24
pytz == 2020.5
six == 1.15.0

Code description

  • main.py:
    • This is where we run the main loop
    • Currently the FPS of the game is set to 60
  • character.py:
    • We build class Charater, Player, Enemy, Bullet and Coconut. Notice that classes Player and Enemy are inharitted from class Character
  • tilemap.py:
    • Where we build class related to the background map, Tiledmap, Camera, Obstacle, Proof and Block.
  • materials:
    • Where we store the game images, including characters' sprite sheets, background picture, and so on

Game instruction

  1. git clone https://github.com/PythonFinalProject/OurGame.git
  2. Run the main.py and you will have a pop up window.
  3. If you need any assist during the game, click SET and then HELP on the game window.

Bug and Problem report

  • ZeroDivisionError: float division by zero (12/27):

    • seldom happened. In character.py,line 183, self.x += self.vel*dx/dl dl = 0???
  • python pass by value or reference (12/21):

    • In order to force python pass the variable "run" as reference, Nelson set "run" as a list "[True]"
  • arrow key "UP" didn't work in 2P mode (12/21):

    • Previously Nelson used arrow keys to control the second player but faced some problem: the second player couldn't shoot bullets while moving up. After changing control keys to "IJKL", everything works perfect
  • PNG warning (12/21):

    • Previouly everytime Nelson created character using the png file "blue_woman_sprite.png" and "skull_sprite.png", the command window would print out warning message: "libpng warning: iCCP: known incorrect sRGB profile". This issue was caused because Libpng-1.6 is more stringent about checking ICC profiles than previous versions. We can ignore the warning. To get rid of it, remove the iCCP chunk from the PNG image by running the command "mogrify *.png" (Nelson ran it in WSL2 device, might not be able to run in Windows powershell)

Game detail information

  • chen

    Before starting the main game loop, we create a game interface to enhance user's gameplay experience.

    For example, players can choose either single or cooperative mode or get help by clicking Set button.

    After the game starts, some basic game information are displayed on the game window, for example, players' health, current weapon, and the bullet left for special weapon (So don't relax even if you get really strong weapon!). The game ends if all the players died or more than 30 enemies appear on the map (Notice the "Warning" for the latter) .

    Another game interface design is displayed if the game ends. The Score displayed the top ten highest scores recorded (the score are recorded automatically) and users can easily reset the score record if they want. Click "Again" to restart a game.

  • ChiaLingWeng

    There are 3 different types of objects in our maps, Stone, Proof and Block.

    -Stone: It acts as an obstacle for Characters moving on x axis, but an accelerating tunnel for Characters moving on y axis.

    -Proof: Just as literally, this kind of object is bullet-proof and the bullet will disappear after colliding with it.

    -Block: Different from Stone, Characters can't pass it from any direction, but it's destroyable with bullet.

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
89 lines (62 loc) · 4.63 KB

File metadata and controls

89 lines (62 loc) · 4.63 KB

OurGame - The ZombiNTU

Hi there! This is our final project of the course EE1004 Computer Programming at National Taiwan University (NTU). We created this game using the programming language Python and the game-design module Pygame. Hope you will like it!

Story

ZombiNTU is a survival horror video game featuring the elements at NTU. The game's story revolves around the student's life at the time of 2050, where the campus was occupied by tons of zombies after the massive invasion in 2020. According to humans' last message back then, the zombies climb out from brown underground tunnels at the northwest and southeast corners. Also, the abundance of coconuts on the campus serves as the only means for survival, and it is said that there are weapons and magic inside. The predecessors already created some accelerating tunnels and shelter blocks in the campus, which provide you a way to hide or escape from the zombies. Be noticed that if the number of zombies exceeds 30, the campus will collapse... You are our last hope to defend the territory and honor of NTU.

File structure

.
├── README.md
├── character.py
├── tilemap.py
├── main.py
├── materials
└── score.csv

Dependent python libraries

numpy == 1.19.5
pandas == 1.2.0
pygame == 2.0.1
python-dateutil == 2.8.1
PyTMX == 3.24
pytz == 2020.5
six == 1.15.0

Code description

  • main.py:
    • This is where we run the main loop
    • Currently the FPS of the game is set to 60
  • character.py:
    • We build class Charater, Player, Enemy, Bullet and Coconut. Notice that classes Player and Enemy are inharitted from class Character
  • tilemap.py:
    • Where we build class related to the background map, Tiledmap, Camera, Obstacle, Proof and Block.
  • materials:
    • Where we store the game images, including characters' sprite sheets, background picture, and so on

Game instruction

  1. git clone https://github.com/PythonFinalProject/OurGame.git
  2. Run the main.py and you will have a pop up window.
  3. If you need any assist during the game, click SET and then HELP on the game window.

Bug and Problem report

  • ZeroDivisionError: float division by zero (12/27):

    • seldom happened. In character.py,line 183, self.x += self.vel*dx/dl dl = 0???
  • python pass by value or reference (12/21):

    • In order to force python pass the variable "run" as reference, Nelson set "run" as a list "[True]"
  • arrow key "UP" didn't work in 2P mode (12/21):

    • Previously Nelson used arrow keys to control the second player but faced some problem: the second player couldn't shoot bullets while moving up. After changing control keys to "IJKL", everything works perfect
  • PNG warning (12/21):

    • Previouly everytime Nelson created character using the png file "blue_woman_sprite.png" and "skull_sprite.png", the command window would print out warning message: "libpng warning: iCCP: known incorrect sRGB profile". This issue was caused because Libpng-1.6 is more stringent about checking ICC profiles than previous versions. We can ignore the warning. To get rid of it, remove the iCCP chunk from the PNG image by running the command "mogrify *.png" (Nelson ran it in WSL2 device, might not be able to run in Windows powershell)

Game detail information

  • chen

    Before starting the main game loop, we create a game interface to enhance user's gameplay experience.

    For example, players can choose either single or cooperative mode or get help by clicking Set button.

    After the game starts, some basic game information are displayed on the game window, for example, players' health, current weapon, and the bullet left for special weapon (So don't relax even if you get really strong weapon!). The game ends if all the players died or more than 30 enemies appear on the map (Notice the "Warning" for the latter) .

    Another game interface design is displayed if the game ends. The Score displayed the top ten highest scores recorded (the score are recorded automatically) and users can easily reset the score record if they want. Click "Again" to restart a game.

  • ChiaLingWeng

    There are 3 different types of objects in our maps, Stone, Proof and Block.

    -Stone: It acts as an obstacle for Characters moving on x axis, but an accelerating tunnel for Characters moving on y axis.

    -Proof: Just as literally, this kind of object is bullet-proof and the bullet will disappear after colliding with it.

    -Block: Different from Stone, Characters can't pass it from any direction, but it's destroyable with bullet.

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

History
89 lines (62 loc) · 4.63 KB

File metadata and controls

89 lines (62 loc) · 4.63 KB

OurGame - The ZombiNTU

Hi there! This is our final project of the course EE1004 Computer Programming at National Taiwan University (NTU). We created this game using the programming language Python and the game-design module Pygame. Hope you will like it!

Story

ZombiNTU is a survival horror video game featuring the elements at NTU. The game's story revolves around the student's life at the time of 2050, where the campus was occupied by tons of zombies after the massive invasion in 2020. According to humans' last message back then, the zombies climb out from brown underground tunnels at the northwest and southeast corners. Also, the abundance of coconuts on the campus serves as the only means for survival, and it is said that there are weapons and magic inside. The predecessors already created some accelerating tunnels and shelter blocks in the campus, which provide you a way to hide or escape from the zombies. Be noticed that if the number of zombies exceeds 30, the campus will collapse... You are our last hope to defend the territory and honor of NTU.

File structure

.
├── README.md
├── character.py
├── tilemap.py
├── main.py
├── materials
└── score.csv

Dependent python libraries

numpy == 1.19.5
pandas == 1.2.0
pygame == 2.0.1
python-dateutil == 2.8.1
PyTMX == 3.24
pytz == 2020.5
six == 1.15.0

Code description

  • main.py:
    • This is where we run the main loop
    • Currently the FPS of the game is set to 60
  • character.py:
    • We build class Charater, Player, Enemy, Bullet and Coconut. Notice that classes Player and Enemy are inharitted from class Character
  • tilemap.py:
    • Where we build class related to the background map, Tiledmap, Camera, Obstacle, Proof and Block.
  • materials:
    • Where we store the game images, including characters' sprite sheets, background picture, and so on

Game instruction

  1. git clone https://github.com/PythonFinalProject/OurGame.git
  2. Run the main.py and you will have a pop up window.
  3. If you need any assist during the game, click SET and then HELP on the game window.

Bug and Problem report

  • ZeroDivisionError: float division by zero (12/27):

    • seldom happened. In character.py,line 183, self.x += self.vel*dx/dl dl = 0???
  • python pass by value or reference (12/21):

    • In order to force python pass the variable "run" as reference, Nelson set "run" as a list "[True]"
  • arrow key "UP" didn't work in 2P mode (12/21):

    • Previously Nelson used arrow keys to control the second player but faced some problem: the second player couldn't shoot bullets while moving up. After changing control keys to "IJKL", everything works perfect
  • PNG warning (12/21):

    • Previouly everytime Nelson created character using the png file "blue_woman_sprite.png" and "skull_sprite.png", the command window would print out warning message: "libpng warning: iCCP: known incorrect sRGB profile". This issue was caused because Libpng-1.6 is more stringent about checking ICC profiles than previous versions. We can ignore the warning. To get rid of it, remove the iCCP chunk from the PNG image by running the command "mogrify *.png" (Nelson ran it in WSL2 device, might not be able to run in Windows powershell)

Game detail information

  • chen

    Before starting the main game loop, we create a game interface to enhance user's gameplay experience.

    For example, players can choose either single or cooperative mode or get help by clicking Set button.

    After the game starts, some basic game information are displayed on the game window, for example, players' health, current weapon, and the bullet left for special weapon (So don't relax even if you get really strong weapon!). The game ends if all the players died or more than 30 enemies appear on the map (Notice the "Warning" for the latter) .

    Another game interface design is displayed if the game ends. The Score displayed the top ten highest scores recorded (the score are recorded automatically) and users can easily reset the score record if they want. Click "Again" to restart a game.

  • ChiaLingWeng

    There are 3 different types of objects in our maps, Stone, Proof and Block.

    -Stone: It acts as an obstacle for Characters moving on x axis, but an accelerating tunnel for Characters moving on y axis.

    -Proof: Just as literally, this kind of object is bullet-proof and the bullet will disappear after colliding with it.

    -Block: Different from Stone, Characters can't pass it from any direction, but it's destroyable with bullet.