stillerman commited on
Commit
8b6f89e
·
1 Parent(s): 940813c

Better win screens

Browse files
Files changed (1) hide show
  1. src/components/game-component.tsx +76 -30
src/components/game-component.tsx CHANGED
@@ -526,21 +526,43 @@ export default function GameComponent({
526
  ) : (
527
  <div className="flex items-center justify-center h-[calc(100%-2.5rem)]">
528
  {gameStatus === "won" ? (
529
- <div className="bg-green-100 text-green-800 p-4 rounded-md w-full">
530
- <h3 className="font-bold">
531
- You won!
532
- </h3>
533
- <p>
534
- You reached {targetPage} in {hops} hops.
535
- </p>
536
- <Button
537
- onClick={onReset}
538
- variant="outline"
539
- size="sm"
540
- className="mt-2"
541
- >
542
- New Game
543
- </Button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
544
  </div>
545
  ) : (
546
  <div className="bg-red-100 text-red-800 p-4 rounded-md w-full">
@@ -690,24 +712,48 @@ export default function GameComponent({
690
  key={`result-${index}`}
691
  className={`p-2 rounded-lg text-xs ${
692
  isWon
693
- ? "bg-green-50 border border-green-100"
694
  : "bg-red-50 border border-red-100"
695
  }`}
696
  >
697
- <div className="flex items-center gap-1 mb-1 text-xs font-medium text-muted-foreground">
698
- <Flag className="h-3 w-3" />
699
- <span>{isWon ? "Victory!" : "Game Over"}</span>
700
- </div>
701
-
702
- <div>
703
- <p>{message.content}</p>
704
-
705
- {message.metadata?.path && (
706
- <p className="mt-1 text-xs text-muted-foreground">
707
- Path: {message.metadata.path.join(" ")}
708
- </p>
709
- )}
710
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
711
  </div>
712
  );
713
  } else if (message.role === "error") {
 
526
  ) : (
527
  <div className="flex items-center justify-center h-[calc(100%-2.5rem)]">
528
  {gameStatus === "won" ? (
529
+ <div className="bg-gradient-to-r from-green-50 to-emerald-50 border border-green-200 p-6 rounded-lg w-full shadow-sm">
530
+ <div className="flex flex-col items-center text-center">
531
+ <div className="mb-3 bg-green-100 p-3 rounded-full">
532
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="text-green-600"><polyline points="20 6 9 17 4 12"></polyline></svg>
533
+ </div>
534
+ <h3 className="font-bold text-xl text-green-800 mb-2">
535
+ You won!
536
+ </h3>
537
+ <p className="text-green-700 mb-4">
538
+ You reached <span className="font-bold">{targetPage}</span> in <span className="font-bold">{hops}</span> {hops === 1 ? 'hop' : 'hops'} in {formatTime(timeElapsed)}
539
+ </p>
540
+
541
+ <div className="bg-white rounded-md p-4 my-3 w-full max-w-md border border-green-100">
542
+ <h4 className="font-medium text-sm text-green-800 mb-2">Your Path:</h4>
543
+ <div className="flex flex-wrap items-center gap-2 justify-center text-sm">
544
+ {visitedNodes.map((node, index) => (
545
+ <div key={`path-${index}`} className="flex items-center">
546
+ <span className="bg-green-50 px-2 py-1 rounded border border-green-100 font-medium">{node}</span>
547
+ {index < visitedNodes.length - 1 && (
548
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="mx-1 text-green-400"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
549
+ )}
550
+ </div>
551
+ ))}
552
+ </div>
553
+ </div>
554
+
555
+ <div className="flex gap-2 mt-2">
556
+ <Button
557
+ onClick={onReset}
558
+ variant="outline"
559
+ size="sm"
560
+ className="bg-white"
561
+ >
562
+ New Game
563
+ </Button>
564
+ </div>
565
+ </div>
566
  </div>
567
  ) : (
568
  <div className="bg-red-100 text-red-800 p-4 rounded-md w-full">
 
712
  key={`result-${index}`}
713
  className={`p-2 rounded-lg text-xs ${
714
  isWon
715
+ ? "bg-gradient-to-r from-green-50 to-emerald-50 border border-green-200"
716
  : "bg-red-50 border border-red-100"
717
  }`}
718
  >
719
+ {isWon ? (
720
+ <div className="flex flex-col items-center text-center">
721
+ <div className="mb-2 bg-green-100 p-2 rounded-full">
722
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="text-green-600"><polyline points="20 6 9 17 4 12"></polyline></svg>
723
+ </div>
724
+ <h3 className="font-bold text-sm text-green-800 mb-1">{message.content}</h3>
725
+
726
+ {message.metadata?.path && (
727
+ <div className="bg-white rounded p-2 my-2 w-full border border-green-100">
728
+ <h4 className="font-medium text-xs text-green-800 mb-1">Path:</h4>
729
+ <div className="flex flex-wrap items-center gap-1 justify-center text-xs">
730
+ {message.metadata.path.map((node, index) => (
731
+ <div key={`result-path-${index}`} className="flex items-center">
732
+ <span className="bg-green-50 px-1.5 py-0.5 rounded border border-green-100 font-medium">{node}</span>
733
+ {index < message.metadata.path.length - 1 && (
734
+ <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="mx-1 text-green-400"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
735
+ )}
736
+ </div>
737
+ ))}
738
+ </div>
739
+ </div>
740
+ )}
741
+ </div>
742
+ ) : (
743
+ <div>
744
+ <div className="flex items-center gap-1 mb-1 text-xs font-medium text-muted-foreground">
745
+ <Flag className="h-3 w-3" />
746
+ <span>Game Over</span>
747
+ </div>
748
+ <p>{message.content}</p>
749
+
750
+ {message.metadata?.path && (
751
+ <p className="mt-1 text-xs text-muted-foreground">
752
+ Path: {message.metadata.path.join(" → ")}
753
+ </p>
754
+ )}
755
+ </div>
756
+ )}
757
  </div>
758
  );
759
  } else if (message.role === "error") {