Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions Projects/Debate Challenge/README.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# 🎤 Debate Challenge

## Description

Added Debate Challenge, an interactive critical-thinking game where users are given a topic and must present arguments either in favor of or against it. The app evaluates participation, tracks points, and encourages structured reasoning.

## Features

* Random debate topic generator
* For or Against argument selection
* Reasoning and justification input
* Points tracking system
* Argument evaluation and feedback
* Progressive challenge levels
* Critical-thinking focused gameplay

## Benefits

* Enhances communication skills
* Strengthens critical and analytical thinking
* Encourages logical reasoning
* Improves persuasive argument development

## Future Improvements

* AI-powered argument evaluation
* Debate timer system
* Topic categories
* Achievement badges
* Leaderboard system
* Multiplayer debate mode

## Use Cases

* Critical thinking practice
* Public speaking preparation
* Educational learning activities
* Communication skill development

## Learning Outcome

Users develop stronger reasoning, argumentation, and decision-making skills by analyzing topics from different perspectives and defending their viewpoints effectively.
63 changes: 63 additions & 0 deletions Projects/Debate Challenge/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Debate Arena — Rhetorical Combat</title>
<link rel="stylesheet" href="style.css">
</head>
<body>

<div class="arena-container">
<div id="start-overlay" class="overlay">
<h1 style="font-family: 'Space Grotesk'; font-size: 3rem; margin: 0; color: var(--accent);">DEBATE ARENA</h1>
<p style="color: var(--text-dim); margin: 1rem 0 2rem;">Destroy your opponent with pure logic and reasoning.</p>
<button class="btn-attack" onclick="startGame()">Enter Arena</button>
</div>

<main class="battle-view">
<div class="health-grid">
<div>
<div style="display: flex; justify-content: space-between; font-size: 0.8rem; margin-bottom: 4px;">
<span>YOU (DEBATER)</span>
<span id="user-hp-val">100</span>
</div>
<div class="health-bar-container"><div id="user-bar" class="health-fill user-hp"></div></div>
</div>
<div>
<div style="display: flex; justify-content: space-between; font-size: 0.8rem; margin-bottom: 4px;">
<span>THE COUNTER-LOGIC</span>
<span id="opp-hp-val">100</span>
</div>
<div class="health-bar-container"><div id="opp-bar" class="health-fill opp-hp"></div></div>
</div>
</div>

<div class="topic-card">
<div style="font-size: 0.7rem; text-transform: uppercase; color: var(--text-dim); letter-spacing: 2px; margin-bottom: 8px;">Active Topic</div>
<h2 id="topic-display">Social media does more harm than good for teenagers.</h2>
</div>

<div class="input-box">
<div class="controls">
<div class="side-toggle">
<button id="pro-btn" class="side-btn active" onclick="setSide('PRO')">AFFIRMATIVE</button>
<button id="con-btn" class="side-btn" onclick="setSide('CON')">NEGATIVE</button>
</div>
<span id="char-count" style="font-size: 0.8rem; color: var(--text-dim);">Min 50 chars</span>
</div>
<textarea id="argument-input" placeholder="Type your opening statement here... use logical connectors like 'however', 'because', or 'consequently' for more power."></textarea>
<button class="btn-attack" id="attack-btn" onclick="executeAttack()">Deploy Argument</button>
</div>
</main>

<aside class="sidebar">
<div style="font-weight: 800; font-size: 0.9rem; text-transform: uppercase; letter-spacing: 1px;">Battle Log</div>
<div class="battle-log" id="battle-log">
<div class="log-entry">Waiting for opening statement...</div>
</div>
</aside>
</div>
<script src="script.js"></script>
</body>
</html>
16 changes: 16 additions & 0 deletions Projects/Debate Challenge/project.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"title": "Debate Challenge",
"description": "A fast-paced game to test your rhetorical reasoning skills.",
"author": {
"name": "Priya Kalamkar",
"github": "priyakalamkar555-art"
},
"tags": [
"debate game",
"rhetorical-reasoning-game",
"interactive-game",
"vanilla-js"
],
"entry": "index.html",
"thumbnail": null
}
86 changes: 86 additions & 0 deletions Projects/Debate Challenge/script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
const TOPICS = [
"Remote work is better for productivity than office work.",
"Artificial intelligence will replace most creative jobs.",
"Space exploration is a waste of resources.",
"Video games are a valid form of high art.",
"University degrees are becoming obsolete."
];

const CONNECTORS = ['because', 'however', 'therefore', 'consequently', 'furthermore', 'nevertheless', 'moreover', 'although'];

let state = {
userHP: 100,
oppHP: 100,
side: 'PRO'
};

function startGame() {
document.getElementById('start-overlay').classList.add('hidden');
document.getElementById('topic-display').innerText = TOPICS[Math.floor(Math.random() * TOPICS.length)];
}

function setSide(s) {
state.side = s;
document.getElementById('pro-btn').classList.toggle('active', s === 'PRO');
document.getElementById('con-btn').classList.toggle('active', s === 'CON');
}

function executeAttack() {
const input = document.getElementById('argument-input').value.trim();
if (input.length < 50) return alert("Argument too weak. Minimum 50 characters required.");

// Calculate Damage
let damage = 10; // Base damage
damage += (input.length / 50); // Length bonus

CONNECTORS.forEach(c => {
if (input.toLowerCase().includes(c)) damage += 5; // Reasoning bonus
});

damage = Math.floor(damage);
state.oppHP = Math.max(0, state.oppHP - damage);

updateUI();
log(`USER used ${state.side} Logic! Dealt ${damage} damage.`, 'user');

document.getElementById('argument-input').value = "";

if (state.oppHP > 0) {
setTimeout(opponentCounter, 1000);
} else {
endGame(true);
}
}

function opponentCounter() {
const counterDamage = Math.floor(Math.random() * 15) + 10;
state.userHP = Math.max(0, state.userHP - counterDamage);
updateUI();
log(`OPPONENT deployed Counter-Argument! Dealt ${counterDamage} damage.`, 'opp');

if (state.userHP <= 0) endGame(false);
}

function updateUI() {
document.getElementById('user-hp-val').innerText = state.userHP;
document.getElementById('opp-hp-val').innerText = state.oppHP;
document.getElementById('user-bar').style.width = state.userHP + "%";
document.getElementById('opp-bar').style.width = state.oppHP + "%";
}

function log(msg, type) {
const log = document.getElementById('battle-log');
const div = document.createElement('div');
div.className = `log-entry ${type}`;
div.innerText = `> ${msg}`;
log.prepend(div);
}

function endGame(win) {
const overlay = document.getElementById('start-overlay');
overlay.classList.remove('hidden');
overlay.querySelector('h1').innerText = win ? "VICTORY" : "DEFEATED";
overlay.querySelector('h1').style.color = win ? "var(--user-color)" : "var(--opponent-color)";
overlay.querySelector('p').innerText = win ? "Your logic was impenetrable." : "Your reasoning was dismantled.";
overlay.querySelector('button').innerText = "Rematch";
}
Loading
Loading