Visualizzazione dei risultati da 1 a 3 su 3

Discussione: movimenti scacchi

  1. #1

    movimenti scacchi

    Ciao a tutti!
    Sto provando a implementare un programma che mi legge i movimenti degli scacchi di un tavoliere, ma ho delle difficolta nel creare i movimenti dell'alfiere.
    Questo metodo infatti deve verificare la presenza del re, nella diagonale dello scacco nel quale si trova l'alfiere. Io ho un file di questo tipo:
    codice:
    ........
    ........
    ........
    ........
    ....K...
    ........
    ..b.....
    ........
    dove l'alfiere è la 'b' e il re il 'K'. ora in questo caso (visto che si trovano sulla stessa diagonale) dovrei visualizzare un messaggio tipo:
    K è sottoscacco!
    come posso fare?
    grazie

  2. #2
    qualcuno ha un idea?

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Dipende molto da come hai implementato la tua struttura dati della scacchiera... immagino che tu abbia utilizzato una matrice (array)...

    In questo caso, senza sapere nulla di nulla, l'unico suggerimento che ti posso dare è che le diagonali di una matrice godono di alcune proprietà interessanti:

    Data una matrice di questo tipo (le coordinate sono sempre date come [RIGA,COLONNA]):
    codice:
        0   1   2   3   4   5   6   7
      +---+---+---+---+---+---+---+---+
    0 |   |   |   |   |   |   |   |   |
      +---+---+---+---+---+---+---+---+
    1 |   |   |   |   |   |   |   |   |
      +---+---+---+---+---+---+---+---+
    2 |   |   |   |   |   |   |   |   |
      +---+---+---+---+---+---+---+---+
    3 |   |   |   |   |   |   |   |   |
      +---+---+---+---+---+---+---+---+
    4 |   |   |   |   |   |   |   |   |
      +---+---+---+---+---+---+---+---+
    5 |   |   |   |   |   |   |   |   |
      +---+---+---+---+---+---+---+---+
    6 |   |   |   |   |   |   |   |   |
      +---+---+---+---+---+---+---+---+
    7 |   |   |   |   |   |   |   |   |
      +---+---+---+---+---+---+---+---+
    1) Le diagonali principali (quelle da ALTO-SINISTRA a BASSO-DESTRA, ad esempio, da [0,2] a [5,7]) possono essere identificate da una costante K data dalla differenza fra indice di colonna e indice di riga (nell'esempio, la costante vale 2)

    2) Le diagonali secondarie (quelle al contrario della diagonali principali, da BASSO-SINISTRA a ALTO-DESTRA, esempio da [6,0] a [0,6]) possono essere identificate da una costante K data dalla somma fra indice di riga e indice di colonna (nell'esempio, la costante è 6).

    Utilizzando queste due proprietà puoi sapere in tempo O(n) se il RE è su una diagonale dell'alfiere.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.