React feladat (2024. 12. 16. + 2024. 12. 17.)
This commit is contained in:
38
2024. 12. 16/test/src/App.css
Normal file
38
2024. 12. 16/test/src/App.css
Normal file
@@ -0,0 +1,38 @@
|
||||
.App {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.App-logo {
|
||||
height: 40vmin;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
.App-logo {
|
||||
animation: App-logo-spin infinite 20s linear;
|
||||
}
|
||||
}
|
||||
|
||||
.App-header {
|
||||
background-color: #282c34;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: calc(10px + 2vmin);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.App-link {
|
||||
color: #61dafb;
|
||||
}
|
||||
|
||||
@keyframes App-logo-spin {
|
||||
from {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
25
2024. 12. 16/test/src/App.js
Normal file
25
2024. 12. 16/test/src/App.js
Normal file
@@ -0,0 +1,25 @@
|
||||
import logo from './logo.svg';
|
||||
import './App.css';
|
||||
|
||||
function App() {
|
||||
return (
|
||||
<div className="App">
|
||||
<header className="App-header">
|
||||
<img src={logo} className="App-logo" alt="logo" />
|
||||
<p>
|
||||
Edit <code>src/App.js</code> and save to reload.
|
||||
</p>
|
||||
<a
|
||||
className="App-link"
|
||||
href="https://reactjs.org"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Learn React
|
||||
</a>
|
||||
</header>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
||||
8
2024. 12. 16/test/src/App.test.js
Normal file
8
2024. 12. 16/test/src/App.test.js
Normal file
@@ -0,0 +1,8 @@
|
||||
import { render, screen } from '@testing-library/react';
|
||||
import App from './App';
|
||||
|
||||
test('renders learn react link', () => {
|
||||
render(<App />);
|
||||
const linkElement = screen.getByText(/learn react/i);
|
||||
expect(linkElement).toBeInTheDocument();
|
||||
});
|
||||
37
2024. 12. 16/test/src/Body.css
Normal file
37
2024. 12. 16/test/src/Body.css
Normal file
@@ -0,0 +1,37 @@
|
||||
main {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
section {
|
||||
box-shadow: -5px 5px 20px rgb(0, 0, 0);
|
||||
width: 70%;
|
||||
margin: 20px 0;
|
||||
background-color: white;
|
||||
padding: 20px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
section a {
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
}
|
||||
|
||||
section a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
table, th, td {
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
section button {
|
||||
padding: 20px;
|
||||
}
|
||||
72
2024. 12. 16/test/src/Body.js
Normal file
72
2024. 12. 16/test/src/Body.js
Normal file
@@ -0,0 +1,72 @@
|
||||
import React from "react";
|
||||
import "./Body.css"
|
||||
|
||||
function Body() {
|
||||
return (
|
||||
<>
|
||||
<main>
|
||||
<section id="introduction">
|
||||
<a href="https://en.wikipedia.org/wiki/Dying_Light" target="_blank"><h2>Introduction</h2></a>
|
||||
<p>
|
||||
Dying Light is a 2015 survival horror video game developed by Techland and published by Warner Bros. Interactive Entertainment. The game's story follows undercover agent Kyle Crane who is sent to infiltrate a quarantine zone in a fictional Middle Eastern city called Harran. It features an enemy-infested, open world city with a dynamic day–night cycle, in which zombies are slow and clumsy during daytime and extremely aggressive at night. The gameplay is focused on weapons-based combat and parkour, allowing players to choose fight or flight when presented with dangers. The game features an asymmetrical multiplayer mode (originally set to be a pre-order bonus), and a four-player co-operative multiplayer mode.
|
||||
</p>
|
||||
<p>
|
||||
The development of the game began in early 2012, after the team completed the development of Dead Island. The game's parkour system emphasizes natural movement. To implement that, Techland had to abandon most of the story elements and construct them again from scratch. To create a story that would suit the taste of the American audience, the writing team collaborated with Dan Jolley. The story was inspired by both Heart of Darkness and The Plague. Announced in May 2013, it was released in January 2015 for Linux, PlayStation 4, Windows, and Xbox One. The game was planned to be released on PlayStation 3 and Xbox 360, but these versions were cancelled due to hardware limitations.
|
||||
</p>
|
||||
</section>
|
||||
<section id="gameplay">
|
||||
<a href="https://en.wikipedia.org/wiki/Dying_Light" target="_blank"><h2>Gameplay</h2></a>
|
||||
<p>
|
||||
Dying Light is a survival horror video game played from a first-person perspective. The game is set in an open world environment called Harran; initially, an area named the Slums can be freely explored, later adding a second area, accessible via sewers, called Old Town. Players traverse this urban environment, which is overrun by zombies. There is an emphasis on parkour mechanics, which allow players to perform actions such as climbing ledges, leaping from edges, sliding, jumping between roofs and zip-lining. A grappling hook allows players to climb up buildings and quickly travel between places. As players explore the game's world, they can scavenge supplies and loot, which can be used to craft new weapons or sold to vendors. The player character can utilise his "survivor sense" to identify all nearby loot and use lock picks to open locked chests and locked vehicles. Players can also complete various side missions by accepting tasks issued by the non-playable characters in the game's safe zones. As players explore Harran, they can also pick up various collectibles such as notes and journals, and listen to voice mail recordings.
|
||||
</p>
|
||||
<p>
|
||||
Dying Light contains a dynamic day–night cycle. During the day, players can set traps, save random survivors, and make their way to airdrops. The infected are slow, apathetic, and easily visible and they can be easily avoided. Players can use environmental traps, such as spikes, electrified fences, and gas tanks, to kill the infected. At night, the infected transform to become much more dangerous. Without daylight, the senses of the infected become more acute and accurate. They can sprint after the player character, inflict more damage, and gain the ability to jump and climb buildings. For players to avoid contact, they need to use their "survivor sense" to locate and avoid the infected. If the player character is spotted, they can use distractions and traps to reduce the number of infected. Players' main defence against the infected is ultraviolet light, which slows their movement. At safehouses, players can adjust the time of day, skipping night altogether if the player does not feel ready.
|
||||
</p>
|
||||
</section>
|
||||
<section id="about-characters">
|
||||
<a href="https://dyinglight.fandom.com/wiki/Category:Characters" target="_blank"><h2>About characters</h2></a>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Information</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Kyle Crane</td>
|
||||
<td>
|
||||
Kyle Crane is the protagonist of Dying Light, Dying Light: The Following, and Dying Light: The Beast, and is mentioned in Dying Light 2 Stay Human.
|
||||
|
||||
He was voiced by Roger Craig Smith.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
Kadir Suleiman (Rais)
|
||||
</td>
|
||||
<td>
|
||||
Kadir Suleiman, better known as Rais, is a main character featured in Dying Light, serving as the primary antagonist.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</section>
|
||||
<section id="random-weapons">
|
||||
<a href="https://dyinglight.fandom.com/wiki/Weapons_(Dying_Light)" target="_blank"><h2>Random weapons</h2></a>
|
||||
<button onClick={() => revealWeapon()}>Reveal a random weapon</button>
|
||||
<div id="show-random-weapon"></div>
|
||||
</section>
|
||||
</main>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
function revealWeapon() {
|
||||
const randomArray = ["../weapon1.png", "../weapon2.png", "../weapon3.png"]
|
||||
|
||||
let randomWeaponDiv = document.getElementById("show-random-weapon")
|
||||
randomWeaponDiv.innerHTML = ""
|
||||
|
||||
let img = document.createElement("img")
|
||||
img.src = randomArray[Math.floor(Math.random() * 3)]
|
||||
randomWeaponDiv.appendChild(img)
|
||||
}
|
||||
|
||||
export default Body
|
||||
22
2024. 12. 16/test/src/Footer.css
Normal file
22
2024. 12. 16/test/src/Footer.css
Normal file
@@ -0,0 +1,22 @@
|
||||
footer {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background: linear-gradient(to left, rgb(10, 10, 10), rgb(25, 25, 25));
|
||||
height: 100%;
|
||||
padding: 4px 10px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
footer span i {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
footer a {
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
14
2024. 12. 16/test/src/Footer.js
Normal file
14
2024. 12. 16/test/src/Footer.js
Normal file
@@ -0,0 +1,14 @@
|
||||
import React from "react";
|
||||
import "./Footer.css"
|
||||
|
||||
function Footer() {
|
||||
return (
|
||||
<footer>
|
||||
<span><i class="fa-solid fa-copyright"></i>2024, All right reserved</span>
|
||||
<a href="https://dyinglightgame.com/dying-light-2"><span>Dying Light 2: Stay Human</span></a>
|
||||
<a href="/"><img src="../dl-logo.png" alt=""></img></a>
|
||||
</footer>
|
||||
)
|
||||
}
|
||||
|
||||
export default Footer
|
||||
33
2024. 12. 16/test/src/Header.css
Normal file
33
2024. 12. 16/test/src/Header.css
Normal file
@@ -0,0 +1,33 @@
|
||||
nav {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background: linear-gradient(to left, rgb(10, 10, 10), rgb(25, 25, 25));
|
||||
color: white;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
nav a {
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
nav img {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
nav ul li {
|
||||
margin-right: 30px;
|
||||
list-style: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
nav ul li:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
21
2024. 12. 16/test/src/Header.js
Normal file
21
2024. 12. 16/test/src/Header.js
Normal file
@@ -0,0 +1,21 @@
|
||||
import React from "react";
|
||||
import "./Header.css"
|
||||
|
||||
function Header() {
|
||||
return (
|
||||
<>
|
||||
<nav>
|
||||
<a href="/"><img src="../dl-logo.png" alt=""></img></a>
|
||||
<ul>
|
||||
<a href="/"><li>Home page</li></a>
|
||||
<a href="#introduction"><li>Introduction</li></a>
|
||||
<a href="#gameplay"><li>Gameplay</li></a>
|
||||
<a href="#about-characters"><li>About characters</li></a>
|
||||
<a href="#random-weapons"><li>Random weapons</li></a>
|
||||
</ul>
|
||||
</nav>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default Header
|
||||
15
2024. 12. 16/test/src/index.css
Normal file
15
2024. 12. 16/test/src/index.css
Normal file
@@ -0,0 +1,15 @@
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
|
||||
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
|
||||
sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
background-image: url("../public/dl-background.jpg");
|
||||
backdrop-filter: blur(3px);
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
|
||||
monospace;
|
||||
}
|
||||
21
2024. 12. 16/test/src/index.js
Normal file
21
2024. 12. 16/test/src/index.js
Normal file
@@ -0,0 +1,21 @@
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom/client';
|
||||
import './index.css';
|
||||
import Header from './Header';
|
||||
import Body from './Body';
|
||||
import Footer from './Footer'
|
||||
import reportWebVitals from './reportWebVitals';
|
||||
|
||||
const root = ReactDOM.createRoot(document.getElementById('root'));
|
||||
root.render(
|
||||
<React.StrictMode>
|
||||
<Header />
|
||||
<Body />
|
||||
<Footer />
|
||||
</React.StrictMode>
|
||||
);
|
||||
|
||||
// If you want to start measuring performance in your app, pass a function
|
||||
// to log results (for example: reportWebVitals(console.log))
|
||||
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
|
||||
reportWebVitals();
|
||||
1
2024. 12. 16/test/src/logo.svg
Normal file
1
2024. 12. 16/test/src/logo.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
13
2024. 12. 16/test/src/reportWebVitals.js
Normal file
13
2024. 12. 16/test/src/reportWebVitals.js
Normal file
@@ -0,0 +1,13 @@
|
||||
const reportWebVitals = onPerfEntry => {
|
||||
if (onPerfEntry && onPerfEntry instanceof Function) {
|
||||
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
|
||||
getCLS(onPerfEntry);
|
||||
getFID(onPerfEntry);
|
||||
getFCP(onPerfEntry);
|
||||
getLCP(onPerfEntry);
|
||||
getTTFB(onPerfEntry);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export default reportWebVitals;
|
||||
5
2024. 12. 16/test/src/setupTests.js
Normal file
5
2024. 12. 16/test/src/setupTests.js
Normal file
@@ -0,0 +1,5 @@
|
||||
// jest-dom adds custom jest matchers for asserting on DOM nodes.
|
||||
// allows you to do things like:
|
||||
// expect(element).toHaveTextContent(/react/i)
|
||||
// learn more: https://github.com/testing-library/jest-dom
|
||||
import '@testing-library/jest-dom';
|
||||
Reference in New Issue
Block a user